You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(5) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(40) |
Feb
(14) |
Mar
|
Apr
|
May
(17) |
Jun
(21) |
Jul
|
Aug
(38) |
Sep
|
Oct
(26) |
Nov
(12) |
Dec
(3) |
2005 |
Jan
(10) |
Feb
(29) |
Mar
(57) |
Apr
(17) |
May
|
Jun
(3) |
Jul
(36) |
Aug
(29) |
Sep
(16) |
Oct
|
Nov
(11) |
Dec
(53) |
2006 |
Jan
(61) |
Feb
(65) |
Mar
(33) |
Apr
(22) |
May
(31) |
Jun
(16) |
Jul
(4) |
Aug
(4) |
Sep
(18) |
Oct
(10) |
Nov
(7) |
Dec
(1) |
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(4) |
Aug
|
Sep
|
Oct
(3) |
Nov
(1) |
Dec
(3) |
2008 |
Jan
|
Feb
(1) |
Mar
(2) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
(11) |
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ke...@us...> - 2007-10-16 18:12:51
|
Revision: 512 http://otlkcon.svn.sourceforge.net/otlkcon/?rev=512&view=rev Author: kervin Date: 2007-10-16 11:12:49 -0700 (Tue, 16 Oct 2007) Log Message: ----------- Syncing latest changes. Modified Paths: -------------- trunk/otlkcon/AllocProfiler/AllocProfiler.cpp trunk/otlkcon/AllocProfiler/AllocProfiler.h trunk/otlkcon/AllocProfiler/stdafx.h trunk/otlkcon/OpenConnectorSetup/OpenConnectorSetup.vdproj trunk/otlkcon/mstore/O_IABLogon.cpp trunk/otlkcon/mstore/O_IABLogon.h trunk/otlkcon/mstore/O_IABProvider.cpp trunk/otlkcon/mstore/O_IABProvider.h trunk/otlkcon/mstore/O_IAttach.cpp trunk/otlkcon/mstore/O_IAttach.h trunk/otlkcon/mstore/O_IContainer.cpp trunk/otlkcon/mstore/O_IContainer.h trunk/otlkcon/mstore/O_IFolder.cpp trunk/otlkcon/mstore/O_IFolder.h trunk/otlkcon/mstore/O_IMSLogon.cpp trunk/otlkcon/mstore/O_IMSLogon.h trunk/otlkcon/mstore/O_IMSProvider.cpp trunk/otlkcon/mstore/O_IMSProvider.h trunk/otlkcon/mstore/O_IMessage.cpp trunk/otlkcon/mstore/O_IMessage.h trunk/otlkcon/mstore/O_IMsgStore.cpp trunk/otlkcon/mstore/O_IMsgStore.h trunk/otlkcon/mstore/O_IProp.cpp trunk/otlkcon/mstore/O_IProp.h trunk/otlkcon/mstore/O_IStatus.cpp trunk/otlkcon/mstore/O_IStatus.h trunk/otlkcon/mstore/O_IStream.cpp trunk/otlkcon/mstore/O_IStream.h trunk/otlkcon/mstore/O_ITable.cpp trunk/otlkcon/mstore/O_ITable.h trunk/otlkcon/mstore/O_ITableView.cpp trunk/otlkcon/mstore/O_ITableView.h trunk/otlkcon/mstore/O_IUnknown.cpp trunk/otlkcon/mstore/O_IUnknown.h trunk/otlkcon/mstore/O_IXPLogon.cpp trunk/otlkcon/mstore/O_IXPLogon.h trunk/otlkcon/mstore/O_IXPProvider.cpp trunk/otlkcon/mstore/O_IXPProvider.h trunk/otlkcon/mstore/mstore.cpp trunk/otlkcon/mstore/mstore.h trunk/otlkcon/mstore/mstore.vcproj trunk/otlkcon/mstore/otlkcon_generic_msgstore.cpp trunk/otlkcon/mstore/otlkcon_generic_msgstore.h trunk/otlkcon/ochelper/dll_utility.cpp trunk/otlkcon/ochelper/dll_utility.h trunk/otlkcon/ochelper/logfile.cpp trunk/otlkcon/ochelper/ochelper.cpp trunk/otlkcon/ochelper/ochelper.h trunk/otlkcon/ochelper/ochelper.vcproj trunk/otlkcon/ochelper/stdafx.cpp trunk/otlkcon/ochelper/stdafx.h trunk/otlkcon/otlkcon.ini trunk/otlkcon/otlkcon.rc trunk/otlkcon/otlkcon.sln trunk/otlkcon/otlkcon_account.cpp trunk/otlkcon/otlkcon_account.h trunk/otlkcon/otlkcon_base64.cpp trunk/otlkcon/otlkcon_calendar_component.cpp trunk/otlkcon/otlkcon_calendar_component.h trunk/otlkcon/otlkcon_compare_props.cpp trunk/otlkcon/otlkcon_compare_props.h trunk/otlkcon/otlkcon_config.h trunk/otlkcon/otlkcon_cs.h trunk/otlkcon/otlkcon_entryid.h trunk/otlkcon/otlkcon_event.cpp trunk/otlkcon/otlkcon_event.h trunk/otlkcon/otlkcon_getlasterror.h trunk/otlkcon/otlkcon_gui.cpp trunk/otlkcon/otlkcon_gui.h trunk/otlkcon/otlkcon_guid.h trunk/otlkcon/otlkcon_memory.cpp trunk/otlkcon/otlkcon_memory.h trunk/otlkcon/otlkcon_obj2xml.cpp trunk/otlkcon/otlkcon_obj2xml.h trunk/otlkcon/otlkcon_print.cpp trunk/otlkcon/otlkcon_print.h trunk/otlkcon/otlkcon_prop2str.cpp trunk/otlkcon/otlkcon_prop2str.h trunk/otlkcon/otlkcon_prop2str.reg trunk/otlkcon/otlkcon_registry.cpp trunk/otlkcon/otlkcon_registry.h trunk/otlkcon/otlkcon_sqlite_utils.cpp trunk/otlkcon/otlkcon_sqlite_utils.h trunk/otlkcon/protocols/caldav/caldav.cpp trunk/otlkcon/protocols/caldav/caldav.h trunk/otlkcon/protocols/file/file.cpp trunk/otlkcon/protocols/file/file.h trunk/otlkcon/protocols/ical/libical/ical.h trunk/otlkcon/protocols/ical/libical/icaltime.c trunk/otlkcon/protocols/ical/libical/icaltime.h trunk/otlkcon/resource.h trunk/otlkcon/stdafx.h trunk/otlkcon/tests/otlkcon_tests.h trunk/otlkcon/tests/otlkcon_tests_allocprofiler.cpp trunk/otlkcon/tests/otlkcon_tests_allocprofiler.h trunk/otlkcon/tests/otlkcon_tests_ifolder.cpp trunk/otlkcon/tests/otlkcon_tests_ifolder.h trunk/otlkcon/tests/otlkcon_tests_iprop.cpp trunk/otlkcon/tests/otlkcon_tests_iprop.h trunk/otlkcon/tests/otlkcon_tests_mstore.cpp trunk/otlkcon/tests/otlkcon_tests_mstore.h trunk/otlkcon/tests/tests.cpp trunk/otlkcon/tests/tests.vcproj Added Paths: ----------- trunk/otlkcon/Utils/ trunk/otlkcon/Utils/Config.cs trunk/otlkcon/Utils/ConfigForm.Designer.cs trunk/otlkcon/Utils/ConfigForm.cs trunk/otlkcon/Utils/IUtilsInterface.cs trunk/otlkcon/Utils/Utils.cs trunk/otlkcon/Utils/Utils.csproj trunk/otlkcon/build-binaries/ trunk/otlkcon/mstore/O_IMessage_IO.cpp trunk/otlkcon/mstore/O_IProp_IO.cpp trunk/otlkcon/mstore/O_IProp_Utils.cpp trunk/otlkcon/tests/otlkcon_tests_remote_folder_sync.cpp trunk/otlkcon/tests/otlkcon_tests_remote_folder_sync.h Modified: trunk/otlkcon/AllocProfiler/AllocProfiler.cpp =================================================================== --- trunk/otlkcon/AllocProfiler/AllocProfiler.cpp 2007-07-16 01:43:22 UTC (rev 511) +++ trunk/otlkcon/AllocProfiler/AllocProfiler.cpp 2007-10-16 18:12:49 UTC (rev 512) @@ -1,5 +1,5 @@ /***************************************************************************** -Copyright 2006 Kervin L. Pierre +Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Kervin L. Pierre EMAIL: ot...@ad... This file is part of Otlkcon. Modified: trunk/otlkcon/AllocProfiler/AllocProfiler.h =================================================================== --- trunk/otlkcon/AllocProfiler/AllocProfiler.h 2007-07-16 01:43:22 UTC (rev 511) +++ trunk/otlkcon/AllocProfiler/AllocProfiler.h 2007-10-16 18:12:49 UTC (rev 512) @@ -1,5 +1,5 @@ /***************************************************************************** -Copyright 2006 Kervin L. Pierre +Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Kervin L. Pierre EMAIL: ot...@ad... This file is part of Otlkcon. Modified: trunk/otlkcon/AllocProfiler/stdafx.h =================================================================== --- trunk/otlkcon/AllocProfiler/stdafx.h 2007-07-16 01:43:22 UTC (rev 511) +++ trunk/otlkcon/AllocProfiler/stdafx.h 2007-10-16 18:12:49 UTC (rev 512) @@ -1,5 +1,5 @@ /***************************************************************************** -Copyright 2006 Kervin L. Pierre +Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Kervin L. Pierre EMAIL: ot...@ad... This file is part of Otlkcon. Modified: trunk/otlkcon/OpenConnectorSetup/OpenConnectorSetup.vdproj =================================================================== --- trunk/otlkcon/OpenConnectorSetup/OpenConnectorSetup.vdproj 2007-07-16 01:43:22 UTC (rev 511) +++ trunk/otlkcon/OpenConnectorSetup/OpenConnectorSetup.vdproj 2007-10-16 18:12:49 UTC (rev 512) @@ -21,6 +21,12 @@ } "Entry" { + "MsmKey" = "8:_122A17B1526BB50CC3354D840425869C" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_1FE38AC9B61F44B99A4937F41E9FE6C4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -39,6 +45,30 @@ } "Entry" { + "MsmKey" = "8:_4A8409D5C7884A20BAAB2212DD32EBE6" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4A8409D5C7884A20BAAB2212DD32EBE6" + "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4A8409D5C7884A20BAAB2212DD32EBE6" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4A8409D5C7884A20BAAB2212DD32EBE6" + "OwnerKey" = "8:_4DD518FA99D94CFA9FD4F322D02CF2B9" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_4DD518FA99D94CFA9FD4F322D02CF2B9" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -51,24 +81,48 @@ } "Entry" { - "MsmKey" = "8:_75409482A8E842069963DE8AA403B435" + "MsmKey" = "8:_5D265EA8AF1F42C7B0D1D6A0A033E7B0" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_67D54A05A3291D9475686EBF130496E9" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_67D54A05A3291D9475686EBF130496E9" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_9FEF8E7281224D75B2E5F20743B4B550" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_812FF60DBFFD29C7A382C50393B3F495" + "OwnerKey" = "8:_5D265EA8AF1F42C7B0D1D6A0A033E7B0" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_AB7CBE4C9696731122B8390C302AF6ED" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B6EFB5785809456F9D9439DEC1E73050" + "OwnerKey" = "8:_4A8409D5C7884A20BAAB2212DD32EBE6" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_BD5C8753C1A84F03A344495A57702560" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -79,6 +133,30 @@ "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } + "Entry" + { + "MsmKey" = "8:_DAA07661887D9C34DF0A45D2A69D9B87" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DAA07661887D9C34DF0A45D2A69D9B87" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E05C9BCECCCA2727130EE23D540FCC8F" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5D265EA8AF1F42C7B0D1D6A0A033E7B0" + "MsmSig" = "8:_UNDEFINED" + } } "Configurations" { @@ -158,7 +236,7 @@ "Object" = "8:_C4DD9B5261AE4652865102BEE45DB230" "FileType" = "3:2" "InstallAction" = "3:1" - "Arguments" = "8:--logfile \"c:\\temp\\ochelper.txt\" --merge-mapisvcinf \"[TARGETDIR]otlkcon.ini\" --find mapisvcinf " + "Arguments" = "8:--logfile \"[TARGETDIR]ochelper_log.txt\" --merge-mapisvcinf \"[TARGETDIR]otlkcon.ini\" --find mapisvcinf " "EntryPoint" = "8:" "Sequence" = "3:1" "Identifier" = "8:_C4A00FBE_4484_49B7_9B5C_26CEC8EB7CEC" @@ -176,6 +254,14 @@ { "LaunchCondition" { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_A140169E683444AA8D90A015104CA716" + { + "Name" = "8:.NET Framework" + "Message" = "8:[VSDNETMSG]" + "Version" = "8:2.0.50727" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=9832" + } } } "File" @@ -200,6 +286,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_122A17B1526BB50CC3354D840425869C" + { + "SourcePath" = "8:ocsqlt32.dll" + "TargetName" = "8:ocsqlt32.dll" + "Tag" = "8:" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1FE38AC9B61F44B99A4937F41E9FE6C4" { "SourcePath" = "8:..\\otlkcon2.ico" @@ -240,6 +346,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67D54A05A3291D9475686EBF130496E9" + { + "SourcePath" = "8:smlog.dll" + "TargetName" = "8:smlog.dll" + "Tag" = "8:" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_79BC0ED1F6E3432BA157C4491C3F0751" { "SourcePath" = "8:..\\Installer\\License.rtf" @@ -260,6 +386,46 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_812FF60DBFFD29C7A382C50393B3F495" + { + "SourcePath" = "8:OpenConnectorUtils.tlb" + "TargetName" = "8:OpenConnectorUtils.tlb" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:2" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AB7CBE4C9696731122B8390C302AF6ED" + { + "SourcePath" = "8:AllocProfiler.dll" + "TargetName" = "8:AllocProfiler.dll" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" { "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" @@ -280,6 +446,46 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DAA07661887D9C34DF0A45D2A69D9B87" + { + "SourcePath" = "8:MAPI32.dll" + "TargetName" = "8:MAPI32.dll" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E05C9BCECCCA2727130EE23D540FCC8F" + { + "SourcePath" = "8:comdlg32.dll" + "TargetName" = "8:comdlg32.dll" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } } "FileType" { @@ -370,7 +576,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Open Connector Groupware" "ProductCode" = "8:{81D70F95-062C-4D0D-B5C6-7A96CB23D452}" - "PackageCode" = "8:{0B4E3EDD-808E-4E96-A727-C238CB715F8B}" + "PackageCode" = "8:{71747D3B-FC12-4A2A-8AB9-CADC0A9AC511}" "UpgradeCode" = "8:{81AFB6EC-732F-431F-9161-81F0431B1388}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" @@ -977,30 +1183,30 @@ } "MergeModule" { - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_75409482A8E842069963DE8AA403B435" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_4A8409D5C7884A20BAAB2212DD32EBE6" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\build-binaries\\installer\\msxml4sxs32.msm" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm" "Properties" { } - "LanguageId" = "3:1033" - "Exclude" = "11:FALSE" + "LanguageId" = "3:0" + "Exclude" = "11:TRUE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_9FEF8E7281224D75B2E5F20743B4B550" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_B6EFB5785809456F9D9439DEC1E73050" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\build-binaries\\installer\\msxml4sys32.msm" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:policy_8_0_microsoft_vc80_debugcrt_x86.msm" "Properties" { } - "LanguageId" = "3:1033" - "Exclude" = "11:FALSE" + "LanguageId" = "3:0" + "Exclude" = "11:TRUE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" @@ -1010,7 +1216,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2064FE922890443BA320E51602079B00" { - "SourcePath" = "8:..\\debug_installed\\mstore32.dll" + "SourcePath" = "8:..\\Debug_Installed\\mstore32.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" @@ -1038,7 +1244,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4DD518FA99D94CFA9FD4F322D02CF2B9" { - "SourcePath" = "8:..\\debug_installed\\AllocProfiler.dll" + "SourcePath" = "8:..\\Debug_Installed\\AllocProfiler.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" @@ -1066,7 +1272,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_55AB6588F90046BDBC9926E0CF6226DA" { - "SourcePath" = "8:..\\debug_installed\\tests.exe" + "SourcePath" = "8:..\\Debug_Installed\\tests.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" @@ -1092,9 +1298,37 @@ { } } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_5D265EA8AF1F42C7B0D1D6A0A033E7B0" + { + "SourcePath" = "8:..\\Utils\\obj\\Debug_Installed\\OpenConnectorUtils.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:2" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{A0560ACF-0280-47D7-9D5D-F27A2DAC2402}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C4DD9B5261AE4652865102BEE45DB230" { - "SourcePath" = "8:..\\debug_installed\\ochelper.exe" + "SourcePath" = "8:..\\Debug_Installed\\ochelper.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" Added: trunk/otlkcon/Utils/Config.cs =================================================================== --- trunk/otlkcon/Utils/Config.cs (rev 0) +++ trunk/otlkcon/Utils/Config.cs 2007-10-16 18:12:49 UTC (rev 512) @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenConnectorUtils +{ + class Config + { + } +} Added: trunk/otlkcon/Utils/ConfigForm.Designer.cs =================================================================== --- trunk/otlkcon/Utils/ConfigForm.Designer.cs (rev 0) +++ trunk/otlkcon/Utils/ConfigForm.Designer.cs 2007-10-16 18:12:49 UTC (rev 512) @@ -0,0 +1,640 @@ +namespace OpenConnectorUtils +{ + partial class ConfigForm + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigForm)); + this.mainTabControl = new System.Windows.Forms.TabControl(); + this.generalTabPage = new System.Windows.Forms.TabPage(); + this.useMasterPasswordCheckBox = new System.Windows.Forms.CheckBox(); + this.enableABPCheckBox = new System.Windows.Forms.CheckBox(); + this.enableXPPCheckBox = new System.Windows.Forms.CheckBox(); + this.openDBFileButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.databaseFileTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.debugTabPage = new System.Windows.Forms.TabPage(); + this.debugLogBrowseButton = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.debugLogFileTextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.debugLevelNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.debugLogDebuggerCheckBox = new System.Windows.Forms.CheckBox(); + this.debugLogMemCheckBox = new System.Windows.Forms.CheckBox(); + this.debugLogFileCheckBox = new System.Windows.Forms.CheckBox(); + this.accountTabPage = new System.Windows.Forms.TabPage(); + this.accountTypeListBox = new System.Windows.Forms.ListBox(); + this.accountSaveButton = new System.Windows.Forms.Button(); + this.accountNewButton = new System.Windows.Forms.Button(); + this.accountDeleteButton = new System.Windows.Forms.Button(); + this.accountMoreOptionsButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.accountABPEnableCheckBox = new System.Windows.Forms.CheckBox(); + this.accountEnabledCheckBox = new System.Windows.Forms.CheckBox(); + this.accountSyncDelCheckBox = new System.Windows.Forms.CheckBox(); + this.accountFindCalCheckBox = new System.Windows.Forms.CheckBox(); + this.accountDefaultCheckBox = new System.Windows.Forms.CheckBox(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.accountUsernameTextBox = new System.Windows.Forms.TextBox(); + this.accountPasswordTextBox = new System.Windows.Forms.TextBox(); + this.accountUriTextBox = new System.Windows.Forms.TextBox(); + this.accountPrincipalURITextBox = new System.Windows.Forms.TextBox(); + this.accountNameTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.accountComboBox = new System.Windows.Forms.ComboBox(); + this.databaseOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.logFileBrowseOpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.mainOkButton = new System.Windows.Forms.Button(); + this.mainCancelButton = new System.Windows.Forms.Button(); + this.mainTabControl.SuspendLayout(); + this.generalTabPage.SuspendLayout(); + this.debugTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.debugLevelNumericUpDown)).BeginInit(); + this.accountTabPage.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // mainTabControl + // + this.mainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.mainTabControl.Controls.Add(this.generalTabPage); + this.mainTabControl.Controls.Add(this.debugTabPage); + this.mainTabControl.Controls.Add(this.accountTabPage); + this.mainTabControl.Location = new System.Drawing.Point(2, 1); + this.mainTabControl.Name = "mainTabControl"; + this.mainTabControl.SelectedIndex = 0; + this.mainTabControl.Size = new System.Drawing.Size(603, 386); + this.mainTabControl.TabIndex = 2; + // + // generalTabPage + // + this.generalTabPage.Controls.Add(this.useMasterPasswordCheckBox); + this.generalTabPage.Controls.Add(this.enableABPCheckBox); + this.generalTabPage.Controls.Add(this.enableXPPCheckBox); + this.generalTabPage.Controls.Add(this.openDBFileButton); + this.generalTabPage.Controls.Add(this.label2); + this.generalTabPage.Controls.Add(this.databaseFileTextBox); + this.generalTabPage.Controls.Add(this.label1); + this.generalTabPage.Location = new System.Drawing.Point(4, 22); + this.generalTabPage.Name = "generalTabPage"; + this.generalTabPage.Padding = new System.Windows.Forms.Padding(3); + this.generalTabPage.Size = new System.Drawing.Size(595, 360); + this.generalTabPage.TabIndex = 0; + this.generalTabPage.Text = "General"; + this.generalTabPage.UseVisualStyleBackColor = true; + // + // useMasterPasswordCheckBox + // + this.useMasterPasswordCheckBox.AutoSize = true; + this.useMasterPasswordCheckBox.Location = new System.Drawing.Point(111, 172); + this.useMasterPasswordCheckBox.Name = "useMasterPasswordCheckBox"; + this.useMasterPasswordCheckBox.Size = new System.Drawing.Size(132, 17); + this.useMasterPasswordCheckBox.TabIndex = 6; + this.useMasterPasswordCheckBox.Text = "User Master Password"; + this.useMasterPasswordCheckBox.UseVisualStyleBackColor = true; + // + // enableABPCheckBox + // + this.enableABPCheckBox.AutoSize = true; + this.enableABPCheckBox.Location = new System.Drawing.Point(111, 148); + this.enableABPCheckBox.Name = "enableABPCheckBox"; + this.enableABPCheckBox.Size = new System.Drawing.Size(166, 17); + this.enableABPCheckBox.TabIndex = 5; + this.enableABPCheckBox.Text = "Enable Addressbook Provider"; + this.enableABPCheckBox.UseVisualStyleBackColor = true; + // + // enableXPPCheckBox + // + this.enableXPPCheckBox.AutoSize = true; + this.enableXPPCheckBox.Location = new System.Drawing.Point(111, 115); + this.enableXPPCheckBox.Name = "enableXPPCheckBox"; + this.enableXPPCheckBox.Size = new System.Drawing.Size(149, 17); + this.enableXPPCheckBox.TabIndex = 4; + this.enableXPPCheckBox.Text = "Enable Transport Provider"; + this.enableXPPCheckBox.UseVisualStyleBackColor = true; + // + // openDBFileButton + // + this.openDBFileButton.Location = new System.Drawing.Point(411, 47); + this.openDBFileButton.Name = "openDBFileButton"; + this.openDBFileButton.Size = new System.Drawing.Size(75, 23); + this.openDBFileButton.TabIndex = 3; + this.openDBFileButton.Text = "Browse..."; + this.openDBFileButton.UseVisualStyleBackColor = true; + this.openDBFileButton.Click += new System.EventHandler(this.openDBFileButton_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(23, 57); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(72, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Database File"; + // + // databaseFileTextBox + // + this.databaseFileTextBox.Location = new System.Drawing.Point(101, 50); + this.databaseFileTextBox.Name = "databaseFileTextBox"; + this.databaseFileTextBox.Size = new System.Drawing.Size(297, 20); + this.databaseFileTextBox.TabIndex = 2; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(20, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 13); + this.label1.TabIndex = 0; + this.label1.Text = "The General configuration page"; + // + // debugTabPage + // + this.debugTabPage.Controls.Add(this.debugLogBrowseButton); + this.debugTabPage.Controls.Add(this.label4); + this.debugTabPage.Controls.Add(this.debugLogFileTextBox); + this.debugTabPage.Controls.Add(this.label3); + this.debugTabPage.Controls.Add(this.debugLevelNumericUpDown); + this.debugTabPage.Controls.Add(this.debugLogDebuggerCheckBox); + this.debugTabPage.Controls.Add(this.debugLogMemCheckBox); + this.debugTabPage.Controls.Add(this.debugLogFileCheckBox); + this.debugTabPage.Location = new System.Drawing.Point(4, 22); + this.debugTabPage.Name = "debugTabPage"; + this.debugTabPage.Padding = new System.Windows.Forms.Padding(3); + this.debugTabPage.Size = new System.Drawing.Size(595, 360); + this.debugTabPage.TabIndex = 1; + this.debugTabPage.Text = "Debug"; + this.debugTabPage.UseVisualStyleBackColor = true; + // + // debugLogBrowseButton + // + this.debugLogBrowseButton.Location = new System.Drawing.Point(415, 182); + this.debugLogBrowseButton.Name = "debugLogBrowseButton"; + this.debugLogBrowseButton.Size = new System.Drawing.Size(75, 23); + this.debugLogBrowseButton.TabIndex = 7; + this.debugLogBrowseButton.Text = "Browse..."; + this.debugLogBrowseButton.UseVisualStyleBackColor = true; + this.debugLogBrowseButton.Click += new System.EventHandler(this.debugLogBrowseButton_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(27, 192); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(44, 13); + this.label4.TabIndex = 5; + this.label4.Text = "Log File"; + // + // debugLogFileTextBox + // + this.debugLogFileTextBox.Location = new System.Drawing.Point(105, 185); + this.debugLogFileTextBox.Name = "debugLogFileTextBox"; + this.debugLogFileTextBox.Size = new System.Drawing.Size(297, 20); + this.debugLogFileTextBox.TabIndex = 6; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(155, 125); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Debug Level"; + // + // debugLevelNumericUpDown + // + this.debugLevelNumericUpDown.Location = new System.Drawing.Point(63, 118); + this.debugLevelNumericUpDown.Maximum = new decimal(new int[] { + 1410065407, + 2, + 0, + 0}); + this.debugLevelNumericUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.debugLevelNumericUpDown.Name = "debugLevelNumericUpDown"; + this.debugLevelNumericUpDown.Size = new System.Drawing.Size(86, 20); + this.debugLevelNumericUpDown.TabIndex = 3; + // + // debugLogDebuggerCheckBox + // + this.debugLogDebuggerCheckBox.AutoSize = true; + this.debugLogDebuggerCheckBox.Location = new System.Drawing.Point(63, 76); + this.debugLogDebuggerCheckBox.Name = "debugLogDebuggerCheckBox"; + this.debugLogDebuggerCheckBox.Size = new System.Drawing.Size(106, 17); + this.debugLogDebuggerCheckBox.TabIndex = 2; + this.debugLogDebuggerCheckBox.Text = "Log to Debugger"; + this.debugLogDebuggerCheckBox.UseVisualStyleBackColor = true; + // + // debugLogMemCheckBox + // + this.debugLogMemCheckBox.AutoSize = true; + this.debugLogMemCheckBox.Location = new System.Drawing.Point(63, 52); + this.debugLogMemCheckBox.Name = "debugLogMemCheckBox"; + this.debugLogMemCheckBox.Size = new System.Drawing.Size(96, 17); + this.debugLogMemCheckBox.TabIndex = 1; + this.debugLogMemCheckBox.Text = "Log to Memory"; + this.debugLogMemCheckBox.UseVisualStyleBackColor = true; + // + // debugLogFileCheckBox + // + this.debugLogFileCheckBox.AutoSize = true; + this.debugLogFileCheckBox.Location = new System.Drawing.Point(63, 28); + this.debugLogFileCheckBox.Name = "debugLogFileCheckBox"; + this.debugLogFileCheckBox.Size = new System.Drawing.Size(75, 17); + this.debugLogFileCheckBox.TabIndex = 0; + this.debugLogFileCheckBox.Text = "Log to File"; + this.debugLogFileCheckBox.UseVisualStyleBackColor = true; + // + // accountTabPage + // + this.accountTabPage.Controls.Add(this.accountTypeListBox); + this.accountTabPage.Controls.Add(this.accountSaveButton); + this.accountTabPage.Controls.Add(this.accountNewButton); + this.accountTabPage.Controls.Add(this.accountDeleteButton); + this.accountTabPage.Controls.Add(this.accountMoreOptionsButton); + this.accountTabPage.Controls.Add(this.groupBox1); + this.accountTabPage.Controls.Add(this.label6); + this.accountTabPage.Controls.Add(this.label5); + this.accountTabPage.Controls.Add(this.accountComboBox); + this.accountTabPage.Location = new System.Drawing.Point(4, 22); + this.accountTabPage.Name = "accountTabPage"; + this.accountTabPage.Size = new System.Drawing.Size(595, 360); + this.accountTabPage.TabIndex = 2; + this.accountTabPage.Text = "Accounts"; + this.accountTabPage.UseVisualStyleBackColor = true; + // + // accountTypeListBox + // + this.accountTypeListBox.FormattingEnabled = true; + this.accountTypeListBox.Location = new System.Drawing.Point(142, 49); + this.accountTypeListBox.Name = "accountTypeListBox"; + this.accountTypeListBox.ScrollAlwaysVisible = true; + this.accountTypeListBox.Size = new System.Drawing.Size(251, 56); + this.accountTypeListBox.TabIndex = 3; + // + // accountSaveButton + // + this.accountSaveButton.Location = new System.Drawing.Point(468, 124); + this.accountSaveButton.Name = "accountSaveButton"; + this.accountSaveButton.Size = new System.Drawing.Size(104, 23); + this.accountSaveButton.TabIndex = 8; + this.accountSaveButton.Text = "Save"; + this.accountSaveButton.UseVisualStyleBackColor = true; + this.accountSaveButton.Click += new System.EventHandler(this.accountSaveButton_Click); + // + // accountNewButton + // + this.accountNewButton.Location = new System.Drawing.Point(468, 66); + this.accountNewButton.Name = "accountNewButton"; + this.accountNewButton.Size = new System.Drawing.Size(104, 23); + this.accountNewButton.TabIndex = 6; + this.accountNewButton.Text = "New"; + this.accountNewButton.UseVisualStyleBackColor = true; + this.accountNewButton.Click += new System.EventHandler(this.accountNewButton_Click); + // + // accountDeleteButton + // + this.accountDeleteButton.Location = new System.Drawing.Point(468, 95); + this.accountDeleteButton.Name = "accountDeleteButton"; + this.accountDeleteButton.Size = new System.Drawing.Size(104, 23); + this.accountDeleteButton.TabIndex = 7; + this.accountDeleteButton.Text = "Delete"; + this.accountDeleteButton.UseVisualStyleBackColor = true; + this.accountDeleteButton.Click += new System.EventHandler(this.accountDeleteButton_Click); + // + // accountMoreOptionsButton + // + this.accountMoreOptionsButton.Location = new System.Drawing.Point(468, 36); + this.accountMoreOptionsButton.Name = "accountMoreOptionsButton"; + this.accountMoreOptionsButton.Size = new System.Drawing.Size(104, 23); + this.accountMoreOptionsButton.TabIndex = 5; + this.accountMoreOptionsButton.Text = "More Options..."; + this.accountMoreOptionsButton.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.accountABPEnableCheckBox); + this.groupBox1.Controls.Add(this.accountEnabledCheckBox); + this.groupBox1.Controls.Add(this.accountSyncDelCheckBox); + this.groupBox1.Controls.Add(this.accountFindCalCheckBox); + this.groupBox1.Controls.Add(this.accountDefaultCheckBox); + this.groupBox1.Controls.Add(this.label11); + this.groupBox1.Controls.Add(this.label10); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.accountUsernameTextBox); + this.groupBox1.Controls.Add(this.accountPasswordTextBox); + this.groupBox1.Controls.Add(this.accountUriTextBox); + this.groupBox1.Controls.Add(this.accountPrincipalURITextBox); + this.groupBox1.Controls.Add(this.accountNameTextBox); + this.groupBox1.Location = new System.Drawing.Point(8, 110); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(420, 355); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Basic Options"; + // + // accountABPEnableCheckBox + // + this.accountABPEnableCheckBox.AutoSize = true; + this.accountABPEnableCheckBox.Location = new System.Drawing.Point(144, 189); + this.accountABPEnableCheckBox.Name = "accountABPEnableCheckBox"; + this.accountABPEnableCheckBox.Size = new System.Drawing.Size(128, 17); + this.accountABPEnableCheckBox.TabIndex = 11; + this.accountABPEnableCheckBox.Text = "Enable Address Book"; + this.accountABPEnableCheckBox.UseVisualStyleBackColor = true; + // + // accountEnabledCheckBox + // + this.accountEnabledCheckBox.AutoSize = true; + this.accountEnabledCheckBox.Location = new System.Drawing.Point(26, 223); + this.accountEnabledCheckBox.Name = "accountEnabledCheckBox"; + this.accountEnabledCheckBox.Size = new System.Drawing.Size(65, 17); + this.accountEnabledCheckBox.TabIndex = 13; + this.accountEnabledCheckBox.Text = "Enabled"; + this.accountEnabledCheckBox.UseVisualStyleBackColor = true; + // + // accountSyncDelCheckBox + // + this.accountSyncDelCheckBox.AutoSize = true; + this.accountSyncDelCheckBox.Location = new System.Drawing.Point(144, 223); + this.accountSyncDelCheckBox.Name = "accountSyncDelCheckBox"; + this.accountSyncDelCheckBox.Size = new System.Drawing.Size(89, 17); + this.accountSyncDelCheckBox.TabIndex = 14; + this.accountSyncDelCheckBox.Text = "Sync Deletes"; + this.accountSyncDelCheckBox.UseVisualStyleBackColor = true; + // + // accountFindCalCheckBox + // + this.accountFindCalCheckBox.AutoSize = true; + this.accountFindCalCheckBox.Location = new System.Drawing.Point(289, 189); + this.accountFindCalCheckBox.Name = "accountFindCalCheckBox"; + this.accountFindCalCheckBox.Size = new System.Drawing.Size(96, 17); + this.accountFindCalCheckBox.TabIndex = 12; + this.accountFindCalCheckBox.Text = "Find Calendars"; + this.accountFindCalCheckBox.UseVisualStyleBackColor = true; + // + // accountDefaultCheckBox + // + this.accountDefaultCheckBox.AutoSize = true; + this.accountDefaultCheckBox.Location = new System.Drawing.Point(26, 189); + this.accountDefaultCheckBox.Name = "accountDefaultCheckBox"; + this.accountDefaultCheckBox.Size = new System.Drawing.Size(103, 17); + this.accountDefaultCheckBox.TabIndex = 10; + this.accountDefaultCheckBox.Text = "Default Account"; + this.accountDefaultCheckBox.UseVisualStyleBackColor = true; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(36, 52); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(55, 13); + this.label11.TabIndex = 2; + this.label11.Text = "Username"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(36, 78); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(53, 13); + this.label10.TabIndex = 4; + this.label10.Text = "Password"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(36, 104); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(26, 13); + this.label9.TabIndex = 6; + this.label9.Text = "URI"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(36, 130); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(69, 13); + this.label8.TabIndex = 8; + this.label8.Text = "Principal URI"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(36, 26); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(60, 13); + this.label7.TabIndex = 0; + this.label7.Text = "Your Name"; + // + // accountUsernameTextBox + // + this.accountUsernameTextBox.Location = new System.Drawing.Point(134, 45); + this.accountUsernameTextBox.Name = "accountUsernameTextBox"; + this.accountUsernameTextBox.Size = new System.Drawing.Size(251, 20); + this.accountUsernameTextBox.TabIndex = 3; + // + // accountPasswordTextBox + // + this.accountPasswordTextBox.Location = new System.Drawing.Point(134, 71); + this.accountPasswordTextBox.Name = "accountPasswordTextBox"; + this.accountPasswordTextBox.PasswordChar = '*'; + this.accountPasswordTextBox.Size = new System.Drawing.Size(251, 20); + this.accountPasswordTextBox.TabIndex = 5; + // + // accountUriTextBox + // + this.accountUriTextBox.Location = new System.Drawing.Point(134, 97); + this.accountUriTextBox.Name = "accountUriTextBox"; + this.accountUriTextBox.Size = new System.Drawing.Size(251, 20); + this.accountUriTextBox.TabIndex = 7; + // + // accountPrincipalURITextBox + // + this.accountPrincipalURITextBox.Location = new System.Drawing.Point(134, 123); + this.accountPrincipalURITextBox.Name = "accountPrincipalURITextBox"; + this.accountPrincipalURITextBox.Size = new System.Drawing.Size(251, 20); + this.accountPrincipalURITextBox.TabIndex = 9; + // + // accountNameTextBox + // + this.accountNameTextBox.Location = new System.Drawing.Point(133, 19); + this.accountNameTextBox.Name = "accountNameTextBox"; + this.accountNameTextBox.Size = new System.Drawing.Size(252, 20); + this.accountNameTextBox.TabIndex = 1; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(50, 49); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(31, 13); + this.label6.TabIndex = 2; + this.label6.Text = "Type"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(50, 27); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(47, 13); + this.label5.TabIndex = 0; + this.label5.Text = "Account"; + // + // accountComboBox + // + this.accountComboBox.FormattingEnabled = true; + this.accountComboBox.Location = new System.Drawing.Point(142, 19); + this.accountComboBox.Name = "accountComboBox"; + this.accountComboBox.Size = new System.Drawing.Size(251, 21); + this.accountComboBox.TabIndex = 1; + this.accountComboBox.SelectedIndexChanged += new System.EventHandler(this.accountComboBox_SelectedIndexChanged); + // + // databaseOpenFileDialog + // + this.databaseOpenFileDialog.FileName = "databaseOpenFileDialog"; + // + // logFileBrowseOpenFileDialog + // + this.logFileBrowseOpenFileDialog.FileName = "openFileDialog1"; + // + // mainOkButton + // + this.mainOkButton.Location = new System.Drawing.Point(20, 393); + this.mainOkButton.Name = "mainOkButton"; + this.mainOkButton.Size = new System.Drawing.Size(97, 23); + this.mainOkButton.TabIndex = 1; + this.mainOkButton.Text = "Ok"; + this.mainOkButton.UseVisualStyleBackColor = true; + this.mainOkButton.Click += new System.EventHandler(this.mainOkButton_Click); + // + // mainCancelButton + // + this.mainCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.mainCancelButton.Location = new System.Drawing.Point(123, 393); + this.mainCancelButton.Name = "mainCancelButton"; + this.mainCancelButton.Size = new System.Drawing.Size(97, 23); + this.mainCancelButton.TabIndex = 2; + this.mainCancelButton.Text = "Cancel"; + this.mainCancelButton.UseVisualStyleBackColor = true; + this.mainCancelButton.Click += new System.EventHandler(this.mainCancelButton_Click); + // + // ConfigForm + // + this.AcceptButton = this.mainOkButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.mainCancelButton; + this.ClientSize = new System.Drawing.Size(609, 417); + this.Controls.Add(this.mainCancelButton); + this.Controls.Add(this.mainOkButton); + this.Controls.Add(this.mainTabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "ConfigForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Open Connector Groupware Configuration"; + this.Load += new System.EventHandler(this.ConfigForm_Load); + this.mainTabControl.ResumeLayout(false); + this.generalTabPage.ResumeLayout(false); + this.generalTabPage.PerformLayout(); + this.debugTabPage.ResumeLayout(false); + this.debugTabPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.debugLevelNumericUpDown)).EndInit(); + this.accountTabPage.ResumeLayout(false); + this.accountTabPage.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl mainTabControl; + private System.Windows.Forms.TabPage generalTabPage; + private System.Windows.Forms.TabPage debugTabPage; + private System.Windows.Forms.TabPage accountTabPage; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button openDBFileButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox databaseFileTextBox; + private System.Windows.Forms.OpenFileDialog databaseOpenFileDialog; + private System.Windows.Forms.CheckBox useMasterPasswordCheckBox; + private System.Windows.Forms.CheckBox enableABPCheckBox; + private System.Windows.Forms.CheckBox enableXPPCheckBox; + private System.Windows.Forms.CheckBox debugLogDebuggerCheckBox; + private System.Windows.Forms.CheckBox debugLogMemCheckBox; + private System.Windows.Forms.CheckBox debugLogFileCheckBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.NumericUpDown debugLevelNumericUpDown; + private System.Windows.Forms.Button debugLogBrowseButton; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox debugLogFileTextBox; + private System.Windows.Forms.OpenFileDialog logFileBrowseOpenFileDialog; + private System.Windows.Forms.ComboBox accountComboBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox accountUsernameTextBox; + private System.Windows.Forms.TextBox accountPasswordTextBox; + private System.Windows.Forms.TextBox accountUriTextBox; + private System.Windows.Forms.TextBox accountPrincipalURITextBox; + private System.Windows.Forms.TextBox accountNameTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.CheckBox accountABPEnableCheckBox; + private System.Windows.Forms.CheckBox accountEnabledCheckBox; + private System.Windows.Forms.CheckBox accountSyncDelCheckBox; + private System.Windows.Forms.CheckBox accountFindCalCheckBox; + private System.Windows.Forms.CheckBox accountDefaultCheckBox; + private System.Windows.Forms.Button accountNewButton; + private System.Windows.Forms.Button accountDeleteButton; + private System.Windows.Forms.Button accountMoreOptionsButton; + private System.Windows.Forms.Button mainOkButton; + private System.Windows.Forms.Button mainCancelButton; + private System.Windows.Forms.Button accountSaveButton; + private System.Windows.Forms.ListBox accountTypeListBox; + } +} \ No newline at end of file Added: trunk/otlkcon/Utils/ConfigForm.cs =================================================================== --- trunk/otlkcon/Utils/ConfigForm.cs (rev 0) +++ trunk/otlkcon/Utils/ConfigForm.cs 2007-10-16 18:12:49 UTC (rev 512) @@ -0,0 +1,310 @@ +using System; +using System.Collections; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace OpenConnectorUtils +{ + public partial class ConfigForm : Form + { + IUtilsInterface utilObj; + ArrayList accounts; + + public ConfigForm() + { + InitializeComponent(); + + accounts = new ArrayList(); + + logFileBrowseOpenFileDialog.AddExtension = true; + logFileBrowseOpenFileDialog.CheckPathExists = true; + logFileBrowseOpenFileDialog.CheckFileExists = false; + logFileBrowseOpenFileDialog.DefaultExt = "txt"; + logFileBrowseOpenFileDialog.FileName = "OpenConnectorLog.txt"; + logFileBrowseOpenFileDialog.Filter = "Text File|*.txt"; + logFileBrowseOpenFileDialog.Multiselect = false; + logFileBrowseOpenFileDialog.Title = "Please choose the log file path"; + + databaseOpenFileDialog.AddExtension = true; + databaseOpenFileDialog.CheckPathExists = true; + databaseOpenFileDialog.CheckFileExists = false; + databaseOpenFileDialog.DefaultExt = "ocdb"; + databaseOpenFileDialog.FileName = "mstore.ocdb"; + databaseOpenFileDialog.Filter = "Open Connector Groupware Database File|*.ocdb"; + databaseOpenFileDialog.Multiselect = false; + databaseOpenFileDialog.Title = "Please choose your data file path"; + + this.BringToFront(); + } + + public void DoConfig() + { + Show(); + } + + private void openDBFileButton_Click(object sender, EventArgs e) + { + databaseOpenFileDialog.InitialDirectory = UtilObj.MainDataFolder; + + DialogResult dbod = databaseOpenFileDialog.ShowDialog(); + if (dbod != DialogResult.OK) + { + return; + } + + databaseFileTextBox.Text = databaseOpenFileDialog.FileName; + } + + private void debugLogBrowseButton_Click(object sender, EventArgs e) + { + logFileBrowseOpenFileDialog.InitialDirectory = UtilObj.MainDataFolder; + + DialogResult dbod = logFileBrowseOpenFileDialog.ShowDialog(); + if (dbod != DialogResult.OK) + { + return; + } + + debugLogFileTextBox.Text = logFileBrowseOpenFileDialog.FileName; + } + + public IUtilsInterface UtilObj + { + get + { + return utilObj; + } + + set + { + utilObj = value; + } + } + + private void ConfigForm_Load(object sender, EventArgs e) + { + databaseFileTextBox.Text = UtilObj.DatabaseFile; + enableABPCheckBox.Checked = UtilObj.EnableABP; + enableXPPCheckBox.Checked = UtilObj.EnableXPP; + + debugLogFileCheckBox.Checked = UtilObj.LogToFile; + debugLogDebuggerCheckBox.Checked = UtilObj.LogToDebugger; + debugLogMemCheckBox.Checked = UtilObj.LogToMemory; + + debugLevelNumericUpDown.Value = UtilObj.DebugLevel; + + debugLogFileTextBox.Text = UtilObj.LogFile;... [truncated message content] |
From: <ke...@us...> - 2007-07-16 01:43:23
|
Revision: 511 http://svn.sourceforge.net/otlkcon/?rev=511&view=rev Author: kervin Date: 2007-07-15 18:43:22 -0700 (Sun, 15 Jul 2007) Log Message: ----------- Removed Paths: ------------- trunk/otlkcon/protocols/neon/neon.vcproj.RELIEF.kervin.user Deleted: trunk/otlkcon/protocols/neon/neon.vcproj.RELIEF.kervin.user =================================================================== --- trunk/otlkcon/protocols/neon/neon.vcproj.RELIEF.kervin.user 2007-07-16 01:27:42 UTC (rev 510) +++ trunk/otlkcon/protocols/neon/neon.vcproj.RELIEF.kervin.user 2007-07-16 01:43:22 UTC (rev 511) @@ -1,65 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioUserFile - ProjectType="Visual C++" - Version="8.00" - ShowAllFiles="false" - > - <Configurations> - <Configuration - Name="Debug|Win32" - > - <DebugSettings - Command="$(TargetPath)" - WorkingDirectory="" - CommandArguments="" - Attach="false" - DebuggerType="3" - Remote="1" - RemoteMachine="RELIEF" - RemoteCommand="" - HttpUrl="" - PDBPath="" - SQLDebugging="" - Environment="" - EnvironmentMerge="true" - DebuggerFlavor="" - MPIRunCommand="" - MPIRunArguments="" - MPIRunWorkingDirectory="" - ApplicationCommand="" - ApplicationArguments="" - ShimCommand="" - MPIAcceptMode="" - MPIAcceptFilter="" - /> - </Configuration> - <Configuration - Name="Release|Win32" - > - <DebugSettings - Command="$(TargetPath)" - WorkingDirectory="" - CommandArguments="" - Attach="false" - DebuggerType="3" - Remote="1" - RemoteMachine="RELIEF" - RemoteCommand="" - HttpUrl="" - PDBPath="" - SQLDebugging="" - Environment="" - EnvironmentMerge="true" - DebuggerFlavor="" - MPIRunCommand="" - MPIRunArguments="" - MPIRunWorkingDirectory="" - ApplicationCommand="" - ApplicationArguments="" - ShimCommand="" - MPIAcceptMode="" - MPIAcceptFilter="" - /> - </Configuration> - </Configurations> -</VisualStudioUserFile> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2007-07-16 00:45:49
|
Revision: 509 http://svn.sourceforge.net/otlkcon/?rev=509&view=rev Author: kervin Date: 2007-07-15 17:45:52 -0700 (Sun, 15 Jul 2007) Log Message: ----------- Rename main branch from 'otlkcon0' to 'otlkcon' Added Paths: ----------- trunk/otlkcon/ Removed Paths: ------------- trunk/otlkcon0/ Copied: trunk/otlkcon (from rev 507, trunk/otlkcon0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2007-07-16 00:37:45
|
Revision: 508 http://svn.sourceforge.net/otlkcon/?rev=508&view=rev Author: kervin Date: 2007-07-15 17:37:43 -0700 (Sun, 15 Jul 2007) Log Message: ----------- Delete really old 'C' source tree. Removed Paths: ------------- trunk/otlkcon/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2007-07-15 23:55:03
|
Revision: 507 http://svn.sourceforge.net/otlkcon/?rev=507&view=rev Author: kervin Date: 2007-07-15 16:55:05 -0700 (Sun, 15 Jul 2007) Log Message: ----------- Adding missing boost files. Touched IMessage working on switch to libical, touched libcaldav working on digest auth issue. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IMessage.cpp trunk/otlkcon0/otlkcon.sln trunk/otlkcon0/protocols/caldav/caldav.cpp Added Paths: ----------- trunk/otlkcon0/boost/bind/ trunk/otlkcon0/boost/bind/apply.hpp trunk/otlkcon0/boost/bind/arg.hpp trunk/otlkcon0/boost/bind/bind_cc.hpp trunk/otlkcon0/boost/bind/bind_mf_cc.hpp trunk/otlkcon0/boost/bind/bind_template.hpp trunk/otlkcon0/boost/bind/make_adaptable.hpp trunk/otlkcon0/boost/bind/mem_fn_cc.hpp trunk/otlkcon0/boost/bind/mem_fn_template.hpp trunk/otlkcon0/boost/bind/mem_fn_vw.hpp trunk/otlkcon0/boost/bind/placeholders.hpp trunk/otlkcon0/boost/bind/protect.hpp trunk/otlkcon0/boost/pending/ trunk/otlkcon0/boost/pending/ct_if.hpp Added: trunk/otlkcon0/boost/bind/apply.hpp =================================================================== --- trunk/otlkcon0/boost/bind/apply.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/apply.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,74 @@ +#ifndef BOOST_BIND_APPLY_HPP_INCLUDED +#define BOOST_BIND_APPLY_HPP_INCLUDED + +// +// apply.hpp +// +// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +namespace boost +{ + +template<class R> struct apply +{ + typedef R result_type; + + template<class F> result_type operator()(F & f) const + { + return f(); + } + + template<class F, class A1> result_type operator()(F & f, A1 & a1) const + { + return f(a1); + } + + template<class F, class A1, class A2> result_type operator()(F & f, A1 & a1, A2 & a2) const + { + return f(a1, a2); + } + + template<class F, class A1, class A2, class A3> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3) const + { + return f(a1, a2, a3); + } + + template<class F, class A1, class A2, class A3, class A4> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4) const + { + return f(a1, a2, a3, a4); + } + + template<class F, class A1, class A2, class A3, class A4, class A5> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const + { + return f(a1, a2, a3, a4, a5); + } + + template<class F, class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const + { + return f(a1, a2, a3, a4, a5, a6); + } + + template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const + { + return f(a1, a2, a3, a4, a5, a6, a7); + } + + template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const + { + return f(a1, a2, a3, a4, a5, a6, a7, a8); + } + + template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(F & f, A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const + { + return f(a1, a2, a3, a4, a5, a6, a7, a8, a9); + } +}; + +} // namespace boost + +#endif // #ifndef BOOST_BIND_APPLY_HPP_INCLUDED Added: trunk/otlkcon0/boost/bind/arg.hpp =================================================================== --- trunk/otlkcon0/boost/bind/arg.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/arg.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,36 @@ +#ifndef BOOST_BIND_ARG_HPP_INCLUDED +#define BOOST_BIND_ARG_HPP_INCLUDED + +// MS compatible compilers support #pragma once + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +// +// bind/arg.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + +namespace boost +{ + +template<int I> class arg +{ +}; + +template<int I> bool operator==(arg<I> const &, arg<I> const &) +{ + return true; +} + +} // namespace boost + +#endif // #ifndef BOOST_BIND_ARG_HPP_INCLUDED Added: trunk/otlkcon0/boost/bind/bind_cc.hpp =================================================================== --- trunk/otlkcon0/boost/bind/bind_cc.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/bind_cc.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,117 @@ +// +// bind/bind_cc.hpp - support for different calling conventions +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + +template<class R> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (), _bi::list0> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ()) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (); + typedef _bi::list0 list_type; + return _bi::bind_t<R, F, list_type> (f, list_type()); +} + +template<class R, class B1, class A1> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1), typename _bi::list_av_1<A1>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1); + typedef typename _bi::list_av_1<A1>::type list_type; + return _bi::bind_t<R, F, list_type> (f, list_type(a1)); +} + +template<class R, class B1, class B2, class A1, class A2> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2), typename _bi::list_av_2<A1, A2>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2); + typedef typename _bi::list_av_2<A1, A2>::type list_type; + return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2)); +} + +template<class R, + class B1, class B2, class B3, + class A1, class A2, class A3> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3), typename _bi::list_av_3<A1, A2, A3>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3); + typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3)); +} + +template<class R, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4), typename _bi::list_av_4<A1, A2, A3, A4>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4); + typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4)); +} + +template<class R, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5), typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5); + typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); +} + +template<class R, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6), typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6); + typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); +} + +template<class R, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7), typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7); + typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template<class R, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8), typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8); + typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template<class R, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9), typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) +{ + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9); + typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; + return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} Added: trunk/otlkcon0/boost/bind/bind_mf_cc.hpp =================================================================== --- trunk/otlkcon0/boost/bind/bind_mf_cc.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/bind_mf_cc.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,227 @@ +// +// bind/bind_mf_cc.hpp - support for different calling conventions +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + +// 0 + +template<class R, class T, + class A1> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F; + typedef typename _bi::list_av_1<A1>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1)); +} + +template<class R, class T, + class A1> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F; + typedef typename _bi::list_av_1<A1>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1)); +} + +// 1 + +template<class R, class T, + class B1, + class A1, class A2> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F; + typedef typename _bi::list_av_2<A1, A2>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2)); +} + +template<class R, class T, + class B1, + class A1, class A2> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F; + typedef typename _bi::list_av_2<A1, A2>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2)); +} + +// 2 + +template<class R, class T, + class B1, class B2, + class A1, class A2, class A3> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F; + typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3)); +} + +template<class R, class T, + class B1, class B2, + class A1, class A2, class A3> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F; + typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3)); +} + +// 3 + +template<class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F; + typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4)); +} + +template<class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F; + typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4)); +} + +// 4 + +template<class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F; + typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F; + typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); +} + +// 5 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F; + typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F; + typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); +} + +// 6 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F; + typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F; + typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); +} + +// 7 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; + typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; + typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); +} + +// 8 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) +{ + typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; + typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) +{ + typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; + typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; + return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); +} Added: trunk/otlkcon0/boost/bind/bind_template.hpp =================================================================== --- trunk/otlkcon0/boost/bind/bind_template.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/bind_template.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,161 @@ +// +// bind/bind_template.hpp +// +// Do not include this header directly. +// +// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + + typedef typename result_traits<R, F>::type result_type; + + result_type operator()() + { + list0 a; + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + result_type operator()() const + { + list0 a; + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1> result_type operator()(A1 & a1) + { + list1<A1 &> a(a1); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1> result_type operator()(A1 & a1) const + { + list1<A1 &> a(a1); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) + { + list2<A1 &, A2 &> a(a1, a2); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const + { + list2<A1 &, A2 &> a(a1, a2); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) + { + list3<A1 &, A2 &, A3 &> a(a1, a2, a3); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const + { + list3<A1 &, A2 &, A3 &> a(a1, a2, a3); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) + { + list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const + { + list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) + { + list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const + { + list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) + { + list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const + { + list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) + { + list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const + { + list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) + { + list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const + { + list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) + { + list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const + { + list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A> result_type eval(A & a) + { + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class A> result_type eval(A & a) const + { + BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); + } + + template<class V> void accept(V & v) const + { + BOOST_BIND_VISIT_EACH(v, f_, 0); + l_.accept(v); + } + + bool compare(this_type const & rhs) const + { + return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_; + } + +private: + + F f_; + L l_; Added: trunk/otlkcon0/boost/bind/make_adaptable.hpp =================================================================== --- trunk/otlkcon0/boost/bind/make_adaptable.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/make_adaptable.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,187 @@ +#ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED +#define BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED + +// +// make_adaptable.hpp +// +// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +namespace boost +{ + +namespace _bi +{ + +template<class R, class F> class af0 +{ +public: + + typedef R result_type; + + explicit af0(F f): f_(f) + { + } + + result_type operator()() + { + return f_(); + } + + result_type operator()() const + { + return f_(); + } + +private: + + F f_; +}; + +template<class R, class A1, class F> class af1 +{ +public: + + typedef R result_type; + typedef A1 argument_type; + typedef A1 arg1_type; + + explicit af1(F f): f_(f) + { + } + + result_type operator()(A1 a1) + { + return f_(a1); + } + + result_type operator()(A1 a1) const + { + return f_(a1); + } + +private: + + F f_; +}; + +template<class R, class A1, class A2, class F> class af2 +{ +public: + + typedef R result_type; + typedef A1 first_argument_type; + typedef A2 second_argument_type; + typedef A1 arg1_type; + typedef A2 arg2_type; + + explicit af2(F f): f_(f) + { + } + + result_type operator()(A1 a1, A2 a2) + { + return f_(a1, a2); + } + + result_type operator()(A1 a1, A2 a2) const + { + return f_(a1, a2); + } + +private: + + F f_; +}; + +template<class R, class A1, class A2, class A3, class F> class af3 +{ +public: + + typedef R result_type; + typedef A1 arg1_type; + typedef A2 arg2_type; + typedef A3 arg3_type; + + explicit af3(F f): f_(f) + { + } + + result_type operator()(A1 a1, A2 a2, A3 a3) + { + return f_(a1, a2, a3); + } + + result_type operator()(A1 a1, A2 a2, A3 a3) const + { + return f_(a1, a2, a3); + } + +private: + + F f_; +}; + +template<class R, class A1, class A2, class A3, class A4, class F> class af4 +{ +public: + + typedef R result_type; + typedef A1 arg1_type; + typedef A2 arg2_type; + typedef A3 arg3_type; + typedef A4 arg4_type; + + explicit af4(F f): f_(f) + { + } + + result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) + { + return f_(a1, a2, a3, a4); + } + + result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const + { + return f_(a1, a2, a3, a4); + } + +private: + + F f_; +}; + +} // namespace _bi + +template<class R, class F> _bi::af0<R, F> make_adaptable(F f) +{ + return _bi::af0<R, F>(f); +} + +template<class R, class A1, class F> _bi::af1<R, A1, F> make_adaptable(F f) +{ + return _bi::af1<R, A1, F>(f); +} + +template<class R, class A1, class A2, class F> _bi::af2<R, A1, A2, F> make_adaptable(F f) +{ + return _bi::af2<R, A1, A2, F>(f); +} + +template<class R, class A1, class A2, class A3, class F> _bi::af3<R, A1, A2, A3, F> make_adaptable(F f) +{ + return _bi::af3<R, A1, A2, A3, F>(f); +} + +template<class R, class A1, class A2, class A3, class A4, class F> _bi::af4<R, A1, A2, A3, A4, F> make_adaptable(F f) +{ + return _bi::af4<R, A1, A2, A3, A4, F>(f); +} + +} // namespace boost + +#endif // #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED Added: trunk/otlkcon0/boost/bind/mem_fn_cc.hpp =================================================================== --- trunk/otlkcon0/boost/bind/mem_fn_cc.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/mem_fn_cc.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,103 @@ +// +// bind/mem_fn_cc.hpp - support for different calling conventions +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/mem_fn.html for documentation. +// + +template<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) ()) +{ + return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f); +} + +template<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f); +} + +template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f); +} + +template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f); +} + +template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f); +} + +template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f); +} + +template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f); +} + +template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8)) +{ + return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f); +} + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const) +{ + return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f); +} Added: trunk/otlkcon0/boost/bind/mem_fn_template.hpp =================================================================== --- trunk/otlkcon0/boost/bind/mem_fn_template.hpp (rev 0) +++ trunk/otlkcon0/boost/bind/mem_fn_template.hpp 2007-07-15 23:55:05 UTC (rev 507) @@ -0,0 +1,934 @@ +// +// bind/mem_fn_template.hpp +// +// Do not include this header directly +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/mem_fn.html for documentation. +// + +// mf0 + +template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0) +{ +public: + + typedef R result_type; + typedef T * argument_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ()) + F f_; + + template<class U> R call(U & u, T const *) const + { + BOOST_MEM_FN_RETURN (u.*f_)(); + } + + template<class U> R call(U & u, void const *) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {} + + R operator()(T * p) const + { + BOOST_MEM_FN_RETURN (p->*f_)(); + } + + template<class U> R operator()(U & u) const + { + BOOST_MEM_FN_RETURN call(u, &u); + } + + R operator()(T & t) const + { + BOOST_MEM_FN_RETURN (t.*f_)(); + } + + bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf0 + +template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0) +{ +public: + + typedef R result_type; + typedef T const * argument_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const) + F f_; + + template<class U> R call(U & u, T const *) const + { + BOOST_MEM_FN_RETURN (u.*f_)(); + } + + template<class U> R call(U & u, void const *) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {} + + template<class U> R operator()(U const & u) const + { + BOOST_MEM_FN_RETURN call(u, &u); + } + + R operator()(T const & t) const + { + BOOST_MEM_FN_RETURN (t.*f_)(); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf1 + +template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1) +{ +public: + + typedef R result_type; + typedef T * first_argument_type; + typedef A1 second_argument_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1)) + F f_; + + template<class U, class B1> R call(U & u, T const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1); + } + + template<class U, class B1> R call(U & u, void const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {} + + R operator()(T * p, A1 a1) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1); + } + + template<class U> R operator()(U & u, A1 a1) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1); + } + + R operator()(T & t, A1 a1) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1); + } + + bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf1 + +template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1) +{ +public: + + typedef R result_type; + typedef T const * first_argument_type; + typedef A1 second_argument_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const) + F f_; + + template<class U, class B1> R call(U & u, T const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1); + } + + template<class U, class B1> R call(U & u, void const *, B1 & b1) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1); + } + + R operator()(T const & t, A1 a1) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf2 + +template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2)) + F f_; + + template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); + } + + template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2); + } + + R operator()(T & t, A1 a1, A2 a2) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); + } + + bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf2 + +template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const) + F f_; + + template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); + } + + template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2); + } + + R operator()(T const & t, A1 a1, A2 a2) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf3 + +template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3)) + F f_; + + template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); + } + + template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3); + } + + R operator()(T & t, A1 a1, A2 a2, A3 a3) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); + } + + bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf3 + +template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const) + F f_; + + template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); + } + + template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3); + } + + R operator()(T const & t, A1 a1, A2 a2, A3 a3) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf4 + +template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4)) + F f_; + + template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); + } + + template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4); + } + + R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); + } + + bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf4 + +template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const) + F f_; + + template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); + } + + template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4); + } + + R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf5 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5)) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); + } + + template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5); + } + + R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); + } + + bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf5 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); + } + + template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5); + } + + R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf6 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6)) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); + } + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6); + } + + R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); + } + + bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf6 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); + } + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6); + } + + R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf7 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7)) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); + } + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7); + } + + R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); + } + + bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// cmf7 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); + } + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); + } + +public: + + explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {} + + template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + BOOST_MEM_FN_RETURN call(u, &u, a1, a2, a3, a4, a5, a6, a7); + } + + R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const + { + BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); + } + + bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const + { + return f_ == rhs.f_; + } + + bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const + { + return f_ != rhs.f_; + } +}; + +// mf8 + +template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8) +{ +public: + + typedef R result_type; + +private: + + BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8)) + F f_; + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const + { + BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8); + } + + template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const + { + BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8); + } + +public: + + explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {} + + R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const + { + BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8); + } + + template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const + { + BOOST_ME... [truncated message content] |
From: <ke...@us...> - 2007-06-26 16:17:42
|
Revision: 506 http://svn.sourceforge.net/otlkcon/?rev=506&view=rev Author: kervin Date: 2007-06-26 09:16:32 -0700 (Tue, 26 Jun 2007) Log Message: ----------- Adding the OTLKCON_USE_MIMEDIR macro for switching between MIMEDIR and ICalImport()/ICalExport(). These methods need to be completed. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IContainer.cpp trunk/otlkcon0/mstore/O_IMsgStore.cpp trunk/otlkcon0/otlkcon_config.h Modified: trunk/otlkcon0/mstore/O_IContainer.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IContainer.cpp 2007-06-26 03:43:24 UTC (rev 505) +++ trunk/otlkcon0/mstore/O_IContainer.cpp 2007-06-26 16:16:32 UTC (rev 506) @@ -650,8 +650,13 @@ tags.aulPropTag[0] = PR_OTLKCON_FOREIGN_ID; wchar_t *iCalStr = NULL; - //result = msg->ICalExport( &iCalStr ); + +#if OTLKCON_USE_MIMEDIR == 1 result = msg->ICalExportMIMEDIR( &iCalStr ); +#else + result = msg->ICalExport( &iCalStr ); +#endif + if( result != S_OK ) { // Error converting to iCal Modified: trunk/otlkcon0/mstore/O_IMsgStore.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMsgStore.cpp 2007-06-26 03:43:24 UTC (rev 505) +++ trunk/otlkcon0/mstore/O_IMsgStore.cpp 2007-06-26 16:16:32 UTC (rev 506) @@ -1302,10 +1302,14 @@ result = msg->BeginDownloading(); +#if OTLKCON_USE_MIMEDIR == 1 result = msg->ICalImportMIMEDIR((wchar_t *)&(currComp->data.bytes), fld); - +#else + result = msg->ICalImport( (wchar_t *)&(currComp->data.bytes) ); +#endif + result = msg->CompleteDownloading(); -// result = msg->ICalImport( (wchar_t *)&(currComp->data.bytes) ); + break; default: Modified: trunk/otlkcon0/otlkcon_config.h =================================================================== --- trunk/otlkcon0/otlkcon_config.h 2007-06-26 03:43:24 UTC (rev 505) +++ trunk/otlkcon0/otlkcon_config.h 2007-06-26 16:16:32 UTC (rev 506) @@ -231,6 +231,10 @@ // of overflowing the query string buffer used by format // unless lots #define OTLKCON_SQL_PARAMS_TO_QUERY 16 + +// Should we use MIMEDIR functions for iCal import/export +#define OTLKCON_USE_MIMEDIR 0 + ////////////////////////////////////////////////////////////////////// //// PROPERTIES //// 6600 67FF Provider-defined internal non-transmittable property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-12-01 01:53:33
|
Revision: 504 http://svn.sourceforge.net/otlkcon/?rev=504&view=rev Author: kervin Date: 2006-11-30 17:53:32 -0800 (Thu, 30 Nov 2006) Log Message: ----------- Small adjustments to get Release installer working. Modified Paths: -------------- trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj trunk/otlkcon0/otlkcon_gui.cpp trunk/otlkcon0/tests/tests.vcproj Modified: trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj =================================================================== --- trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj 2006-11-13 02:29:57 UTC (rev 503) +++ trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj 2006-12-01 01:53:32 UTC (rev 504) @@ -16,8 +16,8 @@ <Configurations> <Configuration Name="Debug|Win32" - OutputDirectory="Debug" - IntermediateDirectory="Debug" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\$(ProjectName)" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" CharacterSet="2" @@ -62,6 +62,7 @@ Name="VCLinkerTool" OutputFile="$(OutDir)/AllocProfiler.dll" LinkIncremental="2" + AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/AllocProfiler.pdb" SubSystem="2" @@ -95,8 +96,8 @@ </Configuration> <Configuration Name="Release|Win32" - OutputDirectory="Release" - IntermediateDirectory="Release" + OutputDirectory="$(SolutionDir)$(ConfigurationName)" + IntermediateDirectory="$(SolutionDir)$(ConfigurationName)\$(ProjectName)" ConfigurationType="2" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" CharacterSet="2" @@ -138,6 +139,7 @@ Name="VCLinkerTool" OutputFile="$(OutDir)/AllocProfiler.dll" LinkIncremental="1" + AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="true" SubSystem="2" OptimizeReferences="2" Modified: trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj =================================================================== --- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-11-13 02:29:57 UTC (rev 503) +++ trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-12-01 01:53:32 UTC (rev 504) @@ -39,7 +39,7 @@ } "Entry" { - "MsmKey" = "8:_40B250BEF4E03C8ACFE036AD60117685" + "MsmKey" = "8:_2F59F8429F60F50EA7AC342A9C22C02E" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } @@ -51,54 +51,60 @@ } "Entry" { - "MsmKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmKey" = "8:_4DD518FA99D94CFA9FD4F322D02CF2B9" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" + "MsmKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_86E5975D131F67F32345CADF1C172281" - "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_86FA92D853F742AB97A15425348C3DB1" - "OwnerKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "MsmKey" = "8:_7FBBE09D4497A73000FDCAA2DC53CFC8" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "MsmKey" = "8:_818B5E439E79400196EF17863BD87D70" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "MsmKey" = "8:_818B5E439E79400196EF17863BD87D70" "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "MsmKey" = "8:_818B5E439E79400196EF17863BD87D70" "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_A599F92A2DBAA4BEB634C767F932E110" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_BD5C8753C1A84F03A344495A57702560" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -111,8 +117,8 @@ } "Entry" { - "MsmKey" = "8:_D54FB2BDD0571EAFF8B0B6DCC15ED3A8" - "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmKey" = "8:_DA37A1A40E304DD1A05582F53FFC2F31" + "OwnerKey" = "8:_818B5E439E79400196EF17863BD87D70" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -274,10 +280,10 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_40B250BEF4E03C8ACFE036AD60117685" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2F59F8429F60F50EA7AC342A9C22C02E" { - "SourcePath" = "8:smlog.dll" - "TargetName" = "8:smlog.dll" + "SourcePath" = "8:msxml4.dll" + "TargetName" = "8:msxml4.dll" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" @@ -289,8 +295,8 @@ "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" + "Register" = "3:4" + "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } @@ -334,12 +340,12 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_86E5975D131F67F32345CADF1C172281" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FBBE09D4497A73000FDCAA2DC53CFC8" { - "SourcePath" = "8:AllocProfiler.dll" - "TargetName" = "8:AllocProfiler.dll" + "SourcePath" = "8:ocsqlt32.dll" + "TargetName" = "8:ocsqlt32.dll" "Tag" = "8:" - "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -354,12 +360,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A599F92A2DBAA4BEB634C767F932E110" { - "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" - "TargetName" = "8:bannrbmp.bmp" + "SourcePath" = "8:smlog.dll" + "TargetName" = "8:smlog.dll" "Tag" = "8:" - "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -371,15 +377,15 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" + "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D54FB2BDD0571EAFF8B0B6DCC15ED3A8" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" { - "SourcePath" = "8:ocsqlt32.dll" - "TargetName" = "8:ocsqlt32.dll" + "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" + "TargetName" = "8:bannrbmp.bmp" "Tag" = "8:" - "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -391,7 +397,7 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" + "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DAA07661887D9C34DF0A45D2A69D9B87" @@ -524,7 +530,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Open Connector Groupware" "ProductCode" = "8:{81D70F95-062C-4D0D-B5C6-7A96CB23D452}" - "PackageCode" = "8:{3DF92327-E4D1-4791-876A-1FD74F79A0B8}" + "PackageCode" = "8:{0B4E3EDD-808E-4E96-A727-C238CB715F8B}" "UpgradeCode" = "8:{81AFB6EC-732F-431F-9161-81F0431B1388}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" @@ -1159,11 +1165,11 @@ "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_86FA92D853F742AB97A15425348C3DB1" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_818B5E439E79400196EF17863BD87D70" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" - "SourcePath" = "8:policy_8_0_microsoft_vc80_debugcrt_x86.msm" + "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm" "Properties" { } @@ -1173,11 +1179,11 @@ "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_9138C496D15648DBB0CFC2B4952EF20A" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_DA37A1A40E304DD1A05582F53FFC2F31" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" - "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm" + "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm" "Properties" { } @@ -1192,7 +1198,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2064FE922890443BA320E51602079B00" { - "SourcePath" = "8:..\\Debug_Installed\\mstore32.dll" + "SourcePath" = "8:..\\Release\\mstore32.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" @@ -1218,9 +1224,37 @@ { } } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4DD518FA99D94CFA9FD4F322D02CF2B9" + { + "SourcePath" = "8:..\\Release\\AllocProfiler.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{CE1D410F-BDA3-47FE-B451-4D46D5E2355A}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_55AB6588F90046BDBC9926E0CF6226DA" { - "SourcePath" = "8:..\\Debug_Installed\\tests.exe" + "SourcePath" = "8:..\\Release\\tests.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" @@ -1248,7 +1282,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C4DD9B5261AE4652865102BEE45DB230" { - "SourcePath" = "8:..\\Debug_Installed\\ochelper.exe" + "SourcePath" = "8:..\\Release\\ochelper.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" Modified: trunk/otlkcon0/otlkcon_gui.cpp =================================================================== --- trunk/otlkcon0/otlkcon_gui.cpp 2006-11-13 02:29:57 UTC (rev 503) +++ trunk/otlkcon0/otlkcon_gui.cpp 2006-12-01 01:53:32 UTC (rev 504) @@ -227,6 +227,8 @@ result = writeRegistry(); } + // FIXME: Stack corruption here + return result; } Modified: trunk/otlkcon0/tests/tests.vcproj =================================================================== --- trunk/otlkcon0/tests/tests.vcproj 2006-11-13 02:29:57 UTC (rev 503) +++ trunk/otlkcon0/tests/tests.vcproj 2006-12-01 01:53:32 UTC (rev 504) @@ -63,6 +63,7 @@ Name="VCLinkerTool" OutputFile="$(OutDir)/tests.exe" LinkIncremental="2" + AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/tests.pdb" SubSystem="1" @@ -137,8 +138,10 @@ /> <Tool Name="VCLinkerTool" + AdditionalDependencies="AllocProfiler.lib mapi32.lib" OutputFile="$(OutDir)/tests.exe" LinkIncremental="1" + AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="true" SubSystem="1" OptimizeReferences="2" @@ -220,7 +223,7 @@ AdditionalDependencies="AllocProfiler.lib mapi32.lib" OutputFile="$(OutDir)/tests.exe" LinkIncremental="2" - AdditionalLibraryDirectories="$(OutDir)" + AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/tests.pdb" SubSystem="1" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-13 02:30:06
|
Revision: 503 http://svn.sourceforge.net/otlkcon/?rev=503&view=rev Author: kervin Date: 2006-11-12 18:29:57 -0800 (Sun, 12 Nov 2006) Log Message: ----------- Started working on getting O_IFolder tests working beginning with IMAPIFolder::CreateMessage(). Not working as yet, needs work. Modified Paths: -------------- trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp trunk/otlkcon0/tests/tests.cpp trunk/otlkcon0/tests/tests.vcproj Added Paths: ----------- trunk/otlkcon0/tests/otlkcon_tests_ifolder.cpp trunk/otlkcon0/tests/otlkcon_tests_ifolder.h Added: trunk/otlkcon0/tests/otlkcon_tests_ifolder.cpp =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_ifolder.cpp (rev 0) +++ trunk/otlkcon0/tests/otlkcon_tests_ifolder.cpp 2006-11-13 02:29:57 UTC (rev 503) @@ -0,0 +1,257 @@ +/***************************************************************************** +Copyright 2006 Kervin L. Pierre + EMAIL: ot...@ad... + +This file is part of Otlkcon. + +Otlkcon is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +Otlkcon 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 +Lesser GNU General Public License for more details. + +You should have received a copy of the Lesser GNU General Public License +along with Otlkcon; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +#include "stdafx.h" +#include "otlkcon_tests_ifolder.h" +#include <otlkcon_prop2str.h> +#include <otlkcon_obj2xml.h> + +using namespace std; + +void otlkcon_test_o_imapifolder_createmessage_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmlpMessageStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE lpMessage = NULL; + LPMAPIFOLDER pNewFolder = NULL; + ULONG ulValues; + LPSPropValue lpPropValues = NULL; + char *msgBuff; + char *tmpBuff; + + list<string> passedTests; + list<string> failedTests; + + bool testFailed = false; + + string currTestName; + + BOOST_MESSAGE("Starting otlkcon_test_o_imapifolder_createmessage_func()..." ); + + msgBuff = (char *)calloc(1, TEST_MSG_BUFF_MAX); + tmpBuff = (char *)calloc(1, TEST_MSG_BUFF_MAX); + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Find Open Connector Message Store Provider + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszA = "Open Connector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + //result = msgStoreTable->Restrict(&rt, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + + case MAPI_E_NOT_FOUND: + // Message store was not found + BOOST_CHECK_MESSAGE( result != MAPI_E_NOT_FOUND, + "ERROR: Message store was not found.\n" ); + + // We really can't continue after this + goto otlkcon_test_o_imapifolder_createmessage_func_fail; + break; + + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmlpMessageStore); + + result = tmlpMessageStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + // TEST 1 + // + // Test that a CreateMessage() can create a minimal message in the + // IPM receive folder. + + currTestName = "test_IPM_Inbox_createmesage"; + BOOST_MESSAGE( "\tTesting: " << currTestName << "\n" ); + + result = tmpFolder->CreateMessage( NULL, + MAPI_DEFERRED_ERRORS, &lpMessage ); + + _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "o_imapifolder::CreateMessage failed, result was 0x%0.8X\n", result ); + + // Check that the CreateMessage() returned ok. + BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); + + if( FAILED(result) ) + { + // FIXME: Should display GetLastError() on failure. + testFailed = true; + } + else + {/* + otlkcon_prop2str *prop2str = new otlkcon_prop2str(); + prop2str->init(MAPIAllocateBuffer, MAPIFreeBuffer); + + // Check that the returned values are what we expected + // in the returned property values array + int errCount = 0; + for( ULONG i=0; i<ulValues; i++ ) + { + // Get the property name if we can + char *propName = prop2str->get( lpPropValues[i].ulPropTag ); + if( propName ) + { + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tGot 0x%0.8X ( %s )\n", + lpPropValues[i].ulPropTag, propName); + } + else + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tGot 0x%0.8X\n", + lpPropValues[i].ulPropTag); + BOOST_MESSAGE( msgBuff ); + + memset(msgBuff, 0, TEST_MSG_BUFF_MAX); + result = otlkcon_propValue2xml(&(lpPropValues[i]), + OTLKCON_OBJ2XML_SHOW_BINARY, 1, MAPIAllocateBuffer, + MAPIAllocateMore, MAPIFreeBuffer, (char **)(&msgBuff), + TEST_MSG_BUFF_MAX); + BOOST_MESSAGE( msgBuff ); + + if( PROP_TYPE(lpPropValues[i].ulPropTag) == PT_ERROR ) + { + errCount++; + } + + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tThere were %d errors out of %d tags.\n", + errCount, ulValues); + BOOST_CHECK_MESSAGE( errCount == 0, msgBuff ); + */ + + result = lpMessage->SaveChanges(0); + + _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "o_imessage::SaveChanges failed, result was 0x%0.8X\n", result ); + + // Check that the CreateMessage() returned ok. + BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); + } + + if( testFailed ) + { + failedTests.push_back( currTestName ); + } + else + { + passedTests.push_back( currTestName ); + } + + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + // TEST 2 + // + // Test that a binary can be retrieved using GetProps. + + testFailed = false; + +// Successs condition. +otlkcon_test_o_imapifolder_createmessage_func_end: + BOOST_MESSAGE( "\nSUCCEEDED: otlkcon_test_o_imapifolder_createmessage_func\n" ); + goto otlkcon_test_o_imapifolder_createmessage_func_cleanup; + +// Fail condition +otlkcon_test_o_imapifolder_createmessage_func_fail: + BOOST_MESSAGE( "\nFAILED: otlkcon_test_o_imapifolder_createmessage_func\n" ); + goto otlkcon_test_o_imapifolder_createmessage_func_cleanup; + +// Cleanup +otlkcon_test_o_imapifolder_createmessage_func_cleanup: + + // List passed tests + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tSucceeded tests.\n" ); + for( list<string>::iterator i=passedTests.begin(); + i!=passedTests.end(); ++i ) + { + _snprintf_s(tmpBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\t\t%s\n", i->c_str()); + strcat_s(msgBuff, TEST_MSG_BUFF_MAX, tmpBuff ); + } + BOOST_MESSAGE( msgBuff ); + + // List failed tests + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tFailed tests.\n" ); + for( list<string>::iterator i=failedTests.begin(); + i!=failedTests.end(); ++i ) + { + _snprintf_s(tmpBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\t\t%s\n", i->c_str()); + strcat_s(msgBuff, TEST_MSG_BUFF_MAX, tmpBuff ); + } + BOOST_MESSAGE( msgBuff ); + + // Free memory, release objects, etc. + if (lpMessage) + lpMessage->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmlpMessageStore) + tmlpMessageStore->Release(); + if (sess) + sess->Release(); + + free(tmpBuff); + free(msgBuff); + + MAPIUninitialize(); +} Added: trunk/otlkcon0/tests/otlkcon_tests_ifolder.h =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_ifolder.h (rev 0) +++ trunk/otlkcon0/tests/otlkcon_tests_ifolder.h 2006-11-13 02:29:57 UTC (rev 503) @@ -0,0 +1,35 @@ +/***************************************************************************** +Copyright 2006 Kervin L. Pierre + EMAIL: ot...@ad... + +This file is part of Otlkcon. + +Otlkcon is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +Otlkcon 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 +Lesser GNU General Public License for more details. + +You should have received a copy of the Lesser GNU General Public License +along with Otlkcon; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +#pragma once + +#include <otlkcon_guid.h> + +#include <string.h> +#include <mapiutil.h> + +#include <boost/test/floating_point_comparison.hpp> +#include <boost/test/unit_test.hpp> + +#define TEST_MSG_BUFF_MAX 1024 + +void otlkcon_test_o_imapifolder_createmessage_func(); Modified: trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-12 16:31:31 UTC (rev 502) +++ trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-13 02:29:57 UTC (rev 503) @@ -398,7 +398,7 @@ LPMAPIFOLDER pNewFolder = NULL; ULONG ulValues,newUlVals; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL, lpSavedValues; char *msgBuff; char *tmpBuff; @@ -473,42 +473,80 @@ currTestName = "test_IPM_folder_setprops"; BOOST_MESSAGE( "\tTesting: " << currTestName << "\n" ); - // Set properties, first case - //set the IPM folder's PR_DISPLAY_NAME property, then recheck the value - SPropValue *pNewProps = new SPropValue[1]; + // First store the old value before modification + SizedSPropTagArray(1, savedProp); + savedProp.cValues = 1; + savedProp.aulPropTag[0] = PR_DISPLAY_NAME; - pNewProps[0].ulPropTag = PR_DISPLAY_NAME; - pNewProps[0].Value.lpszA = "Testing string"; - newUlVals = 1; + ulValues = 1; + result = tmpFolder->GetProps((LPSPropTagArray)&savedProp, 0, + &ulValues, &lpSavedValues); - // Set props - result = tmpFolder->SetProps(newUlVals, pNewProps, NULL); - - // Prepare the error message + // Prepare the error message _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, - "o_imapiprop::SetProps failed, result was 0x%0.8X\n", result ); + "o_imapiprop::GetProps before modification failed, result was 0x%0.8X\n", result ); // Check that the SetProps() returned ok. BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); - // Redundant but important for consistant formating and function - // flow. - if( FAILED(result) ) - { - // FIXME: Should display GetLastError() on failure. + if( FAILED(result) || ulValues == 0 || + PROP_TYPE(lpPropValues[0].ulPropTag)) + { + // GetProps failed testFailed = true; - } + } else { - //retrieve the value - result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + // Set the IPM folder's PR_DISPLAY_NAME property + SPropValue *pNewProps = new SPropValue[1]; + + pNewProps[0].ulPropTag = PR_DISPLAY_NAME; + pNewProps[0].Value.lpszA = "Testing string"; + newUlVals = 1; + + // Set props + result = tmpFolder->SetProps(newUlVals, pNewProps, NULL); + + // Prepare the error message + _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "o_imapiprop::SetProps failed, result was 0x%0.8X\n", result ); + + // Check that the SetProps() returned ok. + BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); + + // Redundant but important for consistant formating and function + // flow. if( FAILED(result) ) { + // FIXME: Should display GetLastError() on failure. testFailed = true; } + else + { + //retrieve the value + result = tmpFolder->GetProps(NULL,0,&ulValues,&lpPropValues); + if( FAILED(result) ) + { + testFailed = true; + } + else + { + BOOST_REQUIRE_MESSAGE( strcmp(lpPropValues[0].Value.lpszA,"Testing string")!=0, + "GetProps() returned incorrect string"); + } + } - BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, - "GetProps() returned incorrect string"); + // Set the original value + result = tmpFolder->SetProps(newUlVals, + lpSavedValues, NULL); + + // Prepare the error message + _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "o_imapiprop::SetProps failed when restoring \ +the original value, result was 0x%0.8X\n", result ); + + // Check that the SetProps() returned ok. + BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); } if( testFailed ) @@ -603,7 +641,7 @@ ULONG newUlVals; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; // Initialize MAPI. result = MAPIInitialize(NULL); @@ -753,7 +791,7 @@ ULONG ulValues,newUlVals; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; // Initialize MAPI. result = MAPIInitialize(NULL); @@ -838,7 +876,7 @@ result = pMsg->SaveChanges(0); //recheck - result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + result = pMsg->GetProps(NULL,0,&ulValues,&lpPropValues); BOOST_REQUIRE_MESSAGE( ulValues != 0, "o_imapiprop::DeleteProps works incorrectly"); @@ -873,7 +911,7 @@ result = pMsg->SaveChanges(0); //recheck - result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + result = pMsg->GetProps(NULL,0,&ulValues,&lpPropValues); BOOST_REQUIRE_MESSAGE( ulValues != 1, "o_imapiprop::DeleteProps works incorrectly"); @@ -909,7 +947,7 @@ result = pMsg->SaveChanges(0); //recheck - result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + result = pMsg->GetProps(NULL,0,&ulValues,&lpPropValues); BOOST_REQUIRE_MESSAGE( ulValues != 0, "o_imapiprop::DeleteProps works incorrectly"); @@ -949,7 +987,7 @@ LPATTACH pAtt = NULL; ULONG ulAttNum; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; enum {METHOD,RENDERING,NUM_ATT_PROPS}; SPropValue spvAttach[NUM_ATT_PROPS]; @@ -1353,7 +1391,7 @@ LPMAPIFOLDER pNewFolder = NULL; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; // Initialize MAPI. result = MAPIInitialize(NULL); @@ -1487,7 +1525,7 @@ LPMAPIFOLDER pNewFolder = NULL; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; // Initialize MAPI. result = MAPIInitialize(NULL); @@ -1623,7 +1661,7 @@ ULONG ulValues; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; // Initialize MAPI. result = MAPIInitialize(NULL); @@ -1675,7 +1713,7 @@ BOOST_MESSAGE( "Testing: " << currTestName ); // GetLastError, first case - result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + result = tmpFolder->GetProps(NULL,0,&ulValues,&lpPropValues); LPMAPIERROR lpError; LPMAPIERROR * lppError = &lpError; @@ -1699,7 +1737,7 @@ // GetLastError, second case - result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); + result = pNewFolder->GetProps(NULL,0,&ulValues,&lpPropValues); result = pNewFolder->GetLastError(result, MAPI_UNICODE, lppError); @@ -1714,7 +1752,7 @@ result = pNewFolder->CreateMessage(NULL, 0, &pMsg); // GetLastError, third case - result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + result = pMsg->GetProps(NULL,0,&ulValues,&lpPropValues); result = pMsg->GetLastError(result, MAPI_UNICODE, lppError); Modified: trunk/otlkcon0/tests/tests.cpp =================================================================== --- trunk/otlkcon0/tests/tests.cpp 2006-11-12 16:31:31 UTC (rev 502) +++ trunk/otlkcon0/tests/tests.cpp 2006-11-13 02:29:57 UTC (rev 503) @@ -24,6 +24,7 @@ #include "otlkcon_tests.h" #include "otlkcon_tests_allocprofiler.h" #include "otlkcon_tests_iprop.h" +#include "otlkcon_tests_ifolder.h" #include "otlkcon_tests_mstore.h" test_suite* init_unit_test_suite(int argc, char* argv[]) @@ -39,16 +40,19 @@ test_suite* test = BOOST_TEST_SUITE( "Open Connector Test Suite " ); // All round tests of the Allocation Profiler - test->add( BOOST_TEST_CASE( &otlkcon_test_allocprofiler_general ) ); + //test->add( BOOST_TEST_CASE( &otlkcon_test_allocprofiler_general ) ); // Test the O_IMsgStore::Create() function - test->add( BOOST_TEST_CASE( &otlkcon_test_mstore_create_func ) ); + //test->add( BOOST_TEST_CASE( &otlkcon_test_mstore_create_func ) ); // Test the O_IProp::GetProps() function - test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapiprop_getprops_func ) ); + //test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapiprop_getprops_func ) ); // Test the O_IProp::SetProps() function - test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapiprop_setprops_func ) ); + //test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapiprop_setprops_func ) ); + // Test the O_IFolder::CreateMessage() function + test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapifolder_createmessage_func ) ); + return test; } Modified: trunk/otlkcon0/tests/tests.vcproj =================================================================== --- trunk/otlkcon0/tests/tests.vcproj 2006-11-12 16:31:31 UTC (rev 502) +++ trunk/otlkcon0/tests/tests.vcproj 2006-11-13 02:29:57 UTC (rev 503) @@ -265,10 +265,6 @@ > </File> <File - RelativePath=".\execution_monitor.cpp" - > - </File> - <File RelativePath=".\framework.cpp" > </File> @@ -293,6 +289,10 @@ > </File> <File + RelativePath=".\otlkcon_tests_ifolder.cpp" + > + </File> + <File RelativePath=".\otlkcon_tests_iprop.cpp" > </File> @@ -387,6 +387,10 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > <File + RelativePath=".\execution_monitor.cpp" + > + </File> + <File RelativePath="..\otlkcon_base64.h" > </File> @@ -411,6 +415,10 @@ > </File> <File + RelativePath=".\otlkcon_tests_ifolder.h" + > + </File> + <File RelativePath=".\otlkcon_tests_iprop.h" > </File> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-12 16:33:25
|
Revision: 502 http://svn.sourceforge.net/otlkcon/?rev=502&view=rev Author: kervin Date: 2006-11-12 08:31:31 -0800 (Sun, 12 Nov 2006) Log Message: ----------- Adding boost/archive. Getting close to a start for Get/SetProps testcases. Modified Paths: -------------- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj trunk/otlkcon0/otlkcon_obj2xml.cpp trunk/otlkcon0/tests/otlkcon_tests.h trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp trunk/otlkcon0/tests/otlkcon_tests_iprop.h trunk/otlkcon0/tests/tests.cpp trunk/otlkcon0/tests/tests.vcproj Added Paths: ----------- trunk/otlkcon0/boost/archive/ trunk/otlkcon0/boost/archive/add_facet.hpp trunk/otlkcon0/boost/archive/archive_exception.hpp trunk/otlkcon0/boost/archive/basic_archive.hpp trunk/otlkcon0/boost/archive/basic_binary_iarchive.hpp trunk/otlkcon0/boost/archive/basic_binary_iprimitive.hpp trunk/otlkcon0/boost/archive/basic_binary_oarchive.hpp trunk/otlkcon0/boost/archive/basic_binary_oprimitive.hpp trunk/otlkcon0/boost/archive/basic_text_iarchive.hpp trunk/otlkcon0/boost/archive/basic_text_iprimitive.hpp trunk/otlkcon0/boost/archive/basic_text_oarchive.hpp trunk/otlkcon0/boost/archive/basic_text_oprimitive.hpp trunk/otlkcon0/boost/archive/basic_xml_archive.hpp trunk/otlkcon0/boost/archive/basic_xml_iarchive.hpp trunk/otlkcon0/boost/archive/basic_xml_oarchive.hpp trunk/otlkcon0/boost/archive/binary_iarchive.hpp trunk/otlkcon0/boost/archive/binary_oarchive.hpp trunk/otlkcon0/boost/archive/binary_wiarchive.hpp trunk/otlkcon0/boost/archive/binary_woarchive.hpp trunk/otlkcon0/boost/archive/codecvt_null.hpp trunk/otlkcon0/boost/archive/detail/ trunk/otlkcon0/boost/archive/detail/abi_prefix.hpp trunk/otlkcon0/boost/archive/detail/abi_suffix.hpp trunk/otlkcon0/boost/archive/detail/archive_pointer_iserializer.hpp trunk/otlkcon0/boost/archive/detail/archive_pointer_oserializer.hpp trunk/otlkcon0/boost/archive/detail/auto_link_archive.hpp trunk/otlkcon0/boost/archive/detail/auto_link_warchive.hpp trunk/otlkcon0/boost/archive/detail/basic_archive_impl.hpp trunk/otlkcon0/boost/archive/detail/basic_config.hpp trunk/otlkcon0/boost/archive/detail/basic_iarchive.hpp trunk/otlkcon0/boost/archive/detail/basic_iserializer.hpp trunk/otlkcon0/boost/archive/detail/basic_oarchive.hpp trunk/otlkcon0/boost/archive/detail/basic_oserializer.hpp trunk/otlkcon0/boost/archive/detail/basic_pointer_iserializer.hpp trunk/otlkcon0/boost/archive/detail/basic_pointer_oserializer.hpp trunk/otlkcon0/boost/archive/detail/basic_serializer.hpp trunk/otlkcon0/boost/archive/detail/basic_serializer_map.hpp trunk/otlkcon0/boost/archive/detail/common_iarchive.hpp trunk/otlkcon0/boost/archive/detail/common_oarchive.hpp trunk/otlkcon0/boost/archive/detail/decl.hpp trunk/otlkcon0/boost/archive/detail/interface_iarchive.hpp trunk/otlkcon0/boost/archive/detail/interface_oarchive.hpp trunk/otlkcon0/boost/archive/detail/iserializer.hpp trunk/otlkcon0/boost/archive/detail/known_archive_types.hpp trunk/otlkcon0/boost/archive/detail/known_archive_types_fwd.hpp trunk/otlkcon0/boost/archive/detail/oserializer.hpp trunk/otlkcon0/boost/archive/detail/polymorphic_iarchive_impl.hpp trunk/otlkcon0/boost/archive/detail/polymorphic_oarchive_impl.hpp trunk/otlkcon0/boost/archive/detail/utf8_codecvt_facet.hpp trunk/otlkcon0/boost/archive/dinkumware.hpp trunk/otlkcon0/boost/archive/impl/ trunk/otlkcon0/boost/archive/impl/archive_pointer_iserializer.ipp trunk/otlkcon0/boost/archive/impl/archive_pointer_oserializer.ipp trunk/otlkcon0/boost/archive/impl/basic_binary_iarchive.ipp trunk/otlkcon0/boost/archive/impl/basic_binary_iprimitive.ipp trunk/otlkcon0/boost/archive/impl/basic_binary_oarchive.ipp trunk/otlkcon0/boost/archive/impl/basic_binary_oprimitive.ipp trunk/otlkcon0/boost/archive/impl/basic_text_iarchive.ipp trunk/otlkcon0/boost/archive/impl/basic_text_iprimitive.ipp trunk/otlkcon0/boost/archive/impl/basic_text_oarchive.ipp trunk/otlkcon0/boost/archive/impl/basic_text_oprimitive.ipp trunk/otlkcon0/boost/archive/impl/basic_xml_grammar.hpp trunk/otlkcon0/boost/archive/impl/basic_xml_iarchive.ipp trunk/otlkcon0/boost/archive/impl/basic_xml_oarchive.ipp trunk/otlkcon0/boost/archive/impl/text_iarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/text_oarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/text_wiarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/text_woarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/xml_iarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/xml_oarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/xml_wiarchive_impl.ipp trunk/otlkcon0/boost/archive/impl/xml_woarchive_impl.ipp trunk/otlkcon0/boost/archive/iterators/ trunk/otlkcon0/boost/archive/iterators/base64_exception.hpp trunk/otlkcon0/boost/archive/iterators/base64_from_binary.hpp trunk/otlkcon0/boost/archive/iterators/binary_from_base64.hpp trunk/otlkcon0/boost/archive/iterators/dataflow.hpp trunk/otlkcon0/boost/archive/iterators/dataflow_exception.hpp trunk/otlkcon0/boost/archive/iterators/escape.hpp trunk/otlkcon0/boost/archive/iterators/head_iterator.hpp trunk/otlkcon0/boost/archive/iterators/insert_linebreaks.hpp trunk/otlkcon0/boost/archive/iterators/istream_iterator.hpp trunk/otlkcon0/boost/archive/iterators/mb_from_wchar.hpp trunk/otlkcon0/boost/archive/iterators/ostream_iterator.hpp trunk/otlkcon0/boost/archive/iterators/remove_whitespace.hpp trunk/otlkcon0/boost/archive/iterators/transform_width.hpp trunk/otlkcon0/boost/archive/iterators/unescape.hpp trunk/otlkcon0/boost/archive/iterators/wchar_from_mb.hpp trunk/otlkcon0/boost/archive/iterators/xml_escape.hpp trunk/otlkcon0/boost/archive/iterators/xml_unescape.hpp trunk/otlkcon0/boost/archive/iterators/xml_unescape_exception.hpp trunk/otlkcon0/boost/archive/polymorphic_binary_iarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_binary_oarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_iarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_oarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_text_iarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_text_oarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_text_wiarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_text_woarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_xml_iarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_xml_oarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_xml_wiarchive.hpp trunk/otlkcon0/boost/archive/polymorphic_xml_woarchive.hpp trunk/otlkcon0/boost/archive/text_iarchive.hpp trunk/otlkcon0/boost/archive/text_oarchive.hpp trunk/otlkcon0/boost/archive/text_wiarchive.hpp trunk/otlkcon0/boost/archive/text_woarchive.hpp trunk/otlkcon0/boost/archive/tmpdir.hpp trunk/otlkcon0/boost/archive/wcslen.hpp trunk/otlkcon0/boost/archive/xml_iarchive.hpp trunk/otlkcon0/boost/archive/xml_oarchive.hpp trunk/otlkcon0/boost/archive/xml_wiarchive.hpp trunk/otlkcon0/boost/archive/xml_woarchive.hpp trunk/otlkcon0/boost/function/ trunk/otlkcon0/boost/function/detail/ trunk/otlkcon0/boost/function/detail/function_iterate.hpp trunk/otlkcon0/boost/function/detail/gen_maybe_include.pl trunk/otlkcon0/boost/function/detail/maybe_include.hpp trunk/otlkcon0/boost/function/detail/prologue.hpp trunk/otlkcon0/boost/function/function0.hpp trunk/otlkcon0/boost/function/function1.hpp trunk/otlkcon0/boost/function/function10.hpp trunk/otlkcon0/boost/function/function2.hpp trunk/otlkcon0/boost/function/function3.hpp trunk/otlkcon0/boost/function/function4.hpp trunk/otlkcon0/boost/function/function5.hpp trunk/otlkcon0/boost/function/function6.hpp trunk/otlkcon0/boost/function/function7.hpp trunk/otlkcon0/boost/function/function8.hpp trunk/otlkcon0/boost/function/function9.hpp trunk/otlkcon0/boost/function/function_base.hpp trunk/otlkcon0/boost/function/function_template.hpp trunk/otlkcon0/boost/function/gen_function_N.pl Modified: trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj =================================================================== --- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-11-09 01:47:17 UTC (rev 501) +++ trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-11-12 16:31:31 UTC (rev 502) @@ -27,12 +27,6 @@ } "Entry" { - "MsmKey" = "8:_1CAC0883E2084AF694E3B7B159F792C2" - "OwnerKey" = "8:_63FB7766980E402EB5A84A2502C27938" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_1FE38AC9B61F44B99A4937F41E9FE6C4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -45,7 +39,7 @@ } "Entry" { - "MsmKey" = "8:_2F59F8429F60F50EA7AC342A9C22C02E" + "MsmKey" = "8:_40B250BEF4E03C8ACFE036AD60117685" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } @@ -57,42 +51,54 @@ } "Entry" { + "MsmKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_63FB7766980E402EB5A84A2502C27938" - "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_63FB7766980E402EB5A84A2502C27938" - "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "MsmKey" = "8:_86E5975D131F67F32345CADF1C172281" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_86FA92D853F742AB97A15425348C3DB1" + "OwnerKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_7FBBE09D4497A73000FDCAA2DC53CFC8" + "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_A599F92A2DBAA4BEB634C767F932E110" - "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_9138C496D15648DBB0CFC2B4952EF20A" + "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_BD5C8753C1A84F03A344495A57702560" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -105,12 +111,24 @@ } "Entry" { + "MsmKey" = "8:_D54FB2BDD0571EAFF8B0B6DCC15ED3A8" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_DAA07661887D9C34DF0A45D2A69D9B87" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_DAA07661887D9C34DF0A45D2A69D9B87" + "OwnerKey" = "8:_55AB6588F90046BDBC9926E0CF6226DA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_E05C9BCECCCA2727130EE23D540FCC8F" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" @@ -256,10 +274,10 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2F59F8429F60F50EA7AC342A9C22C02E" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_40B250BEF4E03C8ACFE036AD60117685" { - "SourcePath" = "8:msxml4.dll" - "TargetName" = "8:msxml4.dll" + "SourcePath" = "8:smlog.dll" + "TargetName" = "8:smlog.dll" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" @@ -271,8 +289,8 @@ "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" - "Register" = "3:4" - "Exclude" = "11:TRUE" + "Register" = "3:1" + "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } @@ -316,12 +334,12 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FBBE09D4497A73000FDCAA2DC53CFC8" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_86E5975D131F67F32345CADF1C172281" { - "SourcePath" = "8:ocsqlt32.dll" - "TargetName" = "8:ocsqlt32.dll" + "SourcePath" = "8:AllocProfiler.dll" + "TargetName" = "8:AllocProfiler.dll" "Tag" = "8:" - "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -336,12 +354,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A599F92A2DBAA4BEB634C767F932E110" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" { - "SourcePath" = "8:smlog.dll" - "TargetName" = "8:smlog.dll" + "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" + "TargetName" = "8:bannrbmp.bmp" "Tag" = "8:" - "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -353,15 +371,15 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" + "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D54FB2BDD0571EAFF8B0B6DCC15ED3A8" { - "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" - "TargetName" = "8:bannrbmp.bmp" + "SourcePath" = "8:ocsqlt32.dll" + "TargetName" = "8:ocsqlt32.dll" "Tag" = "8:" - "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -373,7 +391,7 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" + "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DAA07661887D9C34DF0A45D2A69D9B87" @@ -1127,39 +1145,39 @@ "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_1CAC0883E2084AF694E3B7B159F792C2" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5AB29EDD9D774065AF72BC4A5616566D" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:TRUE" - "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:..\\Installer\\msxml4sys32.msm" "Properties" { } - "LanguageId" = "3:0" + "LanguageId" = "3:1033" "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5AB29EDD9D774065AF72BC4A5616566D" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_86FA92D853F742AB97A15425348C3DB1" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\Installer\\msxml4sys32.msm" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:policy_8_0_microsoft_vc80_debugcrt_x86.msm" "Properties" { } - "LanguageId" = "3:1033" + "LanguageId" = "3:0" "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_63FB7766980E402EB5A84A2502C27938" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_9138C496D15648DBB0CFC2B4952EF20A" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" - "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm" + "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm" "Properties" { } @@ -1174,7 +1192,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2064FE922890443BA320E51602079B00" { - "SourcePath" = "8:..\\Release\\mstore32.dll" + "SourcePath" = "8:..\\Debug_Installed\\mstore32.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" @@ -1200,9 +1218,37 @@ { } } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_55AB6588F90046BDBC9926E0CF6226DA" + { + "SourcePath" = "8:..\\Debug_Installed\\tests.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{D3D35132-5BD5-4C1B-8696-1BB5F98382A7}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C4DD9B5261AE4652865102BEE45DB230" { - "SourcePath" = "8:..\\Release\\ochelper.exe" + "SourcePath" = "8:..\\Debug_Installed\\ochelper.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" Added: trunk/otlkcon0/boost/archive/add_facet.hpp =================================================================== --- trunk/otlkcon0/boost/archive/add_facet.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/add_facet.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,56 @@ +#ifndef BOOST_ARCHIVE_ADD_FACET_HPP +#define BOOST_ARCHIVE_ADD_FACET_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// add_facet.hpp + +// (C) Copyright 2003 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <locale> +#include <boost/config.hpp> +#include <boost/detail/workaround.hpp> + +// does STLport uses native STL for locales? +#if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) \ +&& defined(_STLP_NO_OWN_IOSTREAMS) +// and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER) +# if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER) +# define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT +# endif +#endif + +namespace boost { +namespace archive { + +template<class Facet> +inline std::locale * +add_facet(const std::locale &l, Facet * f){ + return + #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT + // std namespace used for native locale + new std::locale(std::_Addfac(l, f)); + #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar + // std namespace used for native locale + new std::locale(std::_Addfac(l, f)); + #else + // standard compatible + new std::locale(l, f); + #endif +} + +} // namespace archive +} // namespace boost + +#undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT + +#endif // BOOST_ARCHIVE_ADD_FACET_HPP Added: trunk/otlkcon0/boost/archive/archive_exception.hpp =================================================================== --- trunk/otlkcon0/boost/archive/archive_exception.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/archive_exception.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,115 @@ +#ifndef BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP +#define BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// archive/archive_exception.hpp: + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <exception> +#include <cassert> + +namespace boost { +namespace archive { + +////////////////////////////////////////////////////////////////////// +// exceptions thrown by archives +// +class archive_exception : + public virtual std::exception +{ +public: + typedef enum { + no_exception, // initialized without code + other_exception, // any excepton not listed below + unregistered_class, // attempt to serialize a pointer of an + // an unregistered class + invalid_signature, // first line of archive does not contain + // expected string + unsupported_version,// archive created with library version + // subsequent to this one + pointer_conflict, // an attempt has been made to directly + // serialization::detail an object + // after having already serialzed the same + // object through a pointer. Were this permited, + // it the archive load would result in the + // creation of an extra copy of the obect. + incompatible_native_format, // attempt to read native binary format + // on incompatible platform + array_size_too_short,// array being loaded doesn't fit in array allocated + stream_error, // i/o error on stream + invalid_class_name, // class name greater than the maximum permitted. + // most likely a corrupted archive or an attempt + // to insert virus via buffer overrun method. + unregistered_cast // base - derived relationship not registered with + // void_cast_register + } exception_code; + exception_code code; + archive_exception(exception_code c) : + code(c) + {} + virtual const char *what( ) const throw( ) + { + const char *msg = "programming error"; + switch(code){ + case no_exception: + msg = "uninitialized exception"; + break; + case unregistered_class: + msg = "unregistered class"; + break; + case invalid_signature: + msg = "invalid signature"; + break; + case unsupported_version: + msg = "unsupported version"; + break; + case pointer_conflict: + msg = "pointer conflict"; + break; + case incompatible_native_format: + msg = "incompatible native format"; + break; + case array_size_too_short: + msg = "array size too short"; + break; + case stream_error: + msg = "stream error"; + break; + case invalid_class_name: + msg = "class name too long"; + break; + case unregistered_cast: + msg = "unregistered void cast"; + break; + case other_exception: + // if get here - it indicates a derived exception + // was sliced by passing by value in catch + msg = "unknown derived exception"; + break; + default: + assert(false); + break; + } + return msg; + } +protected: + archive_exception() : + code(no_exception) + {} +}; + +}// namespace archive +}// namespace boost + +#endif //BOOST_ARCHIVE_ARCHIVE_EXCEPTION_HPP Added: trunk/otlkcon0/boost/archive/basic_archive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_archive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_archive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,130 @@ +#ifndef BOOST_ARCHIVE_BASIC_ARCHIVE_HPP +#define BOOST_ARCHIVE_BASIC_ARCHIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_archive.hpp: + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <boost/config.hpp> +#include <boost/strong_typedef.hpp> +#include <boost/noncopyable.hpp> + +#include <boost/archive/detail/auto_link_archive.hpp> +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +BOOST_STRONG_TYPEDEF(unsigned int, version_type) +BOOST_STRONG_TYPEDEF(int, class_id_type) +BOOST_STRONG_TYPEDEF(int, class_id_optional_type) +BOOST_STRONG_TYPEDEF(int, class_id_reference_type) +BOOST_STRONG_TYPEDEF(unsigned int, object_id_type) +BOOST_STRONG_TYPEDEF(unsigned int, object_reference_type) + +struct tracking_type { + typedef bool value_type; + bool t; + explicit tracking_type(const bool t_ = false) + : t(t_) + {}; + tracking_type(const tracking_type & t_) + : t(t_.t) + {} + operator bool () const { + return t; + }; + operator bool & () { + return t; + }; + tracking_type & operator=(const bool t_){ + t = t_; + return *this; + } + bool operator==(const tracking_type & rhs) const { + return t == rhs.t; + } + bool operator==(const bool & rhs) const { + return t == rhs; + } + tracking_type & operator=(const tracking_type & rhs){ + t = rhs.t; + return *this; + } +}; + +struct class_name_type : private boost::noncopyable { + char *t; + operator const char * & () const { + return const_cast<const char * &>(t); + } + operator char * () { + return t; + } + explicit class_name_type(const char *key_) + : t(const_cast<char *>(key_)){} + explicit class_name_type(char *key_) + : t(key_){} + class_name_type & operator=(const class_name_type & rhs){ + t = rhs.t; + return *this; + } +}; + +enum archive_flags { + no_header = 1, // suppress archive header info + no_codecvt = 2, // suppress alteration of codecvt facet + no_xml_tag_checking = 4, // suppress checking of xml tags + no_tracking = 8 // suppress ALL tracking +// no_object_creation = 16 // don't create any new objects +}; + +#define NULL_POINTER_TAG class_id_type(-1) + +BOOST_ARCHIVE_DECL(const char *) +ARCHIVE_SIGNATURE(); + +BOOST_ARCHIVE_DECL(unsigned char) +ARCHIVE_VERSION(); + +}// namespace archive +}// namespace boost + +#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas + +#include <boost/serialization/level.hpp> + +// set implementation level to primitive for all types +// used internally by the serialization library + +BOOST_CLASS_IMPLEMENTATION(boost::archive::version_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_reference_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::class_id_optional_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::class_name_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::object_id_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::object_reference_type, primitive_type) +BOOST_CLASS_IMPLEMENTATION(boost::archive::tracking_type, primitive_type) + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// Make sure that the export.hpp header isn't included before any archive header +// Doing so would inhibit construction of correct mpl list of known archive +// types which in turn would inhibit instantiation of all combinations of +// serialization/archive types. + +#ifdef BOOST_SERIALIZATION_EXPORT_HPP +#error "export.hpp must not be included before any archive header" +#endif + +#endif //BOOST_ARCHIVE_BASIC_ARCHIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_binary_iarchive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_binary_iarchive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_binary_iarchive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,128 @@ +#ifndef BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP +#define BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_binary_iarchive.hpp +// +// archives stored as native binary - this should be the fastest way +// to archive the state of a group of obects. It makes no attempt to +// convert to any canonical form. + +// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE +// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. +#include <cstring> + +#include <boost/config.hpp> +#include <boost/detail/workaround.hpp> +#if defined(BOOST_NO_STDC_NAMESPACE) + namespace std{ using ::memcpy; } +#endif + +#include <boost/throw_exception.hpp> +#include <boost/pfto.hpp> + +#include <boost/archive/detail/iserializer.hpp> +#include <boost/archive/detail/interface_iarchive.hpp> +#include <boost/archive/detail/common_iarchive.hpp> + +#include <boost/serialization/string.hpp> + +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////// +// class basic_binary_iarchive - read serialized objects from a input binary stream +template<class Archive> +class basic_binary_iarchive : + public detail::common_iarchive<Archive> +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +public: +#elif defined(BOOST_MSVC) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; +protected: +#else + friend class detail::interface_iarchive<Archive>; +protected: +#endif + // intermediate level to support override of operators + // fot templates in the absence of partial function + // template ordering + template<class T> + void load_override(T & t, BOOST_PFTO int) + { + archive::load(* this->This(), t); + } + // binary files don't include the optional information + void load_override(class_id_optional_type & /* t */, int){} + + // the following have been overridden to provide specific sizes + // for these pseudo prmitive types. + void load_override(version_type & t, int){ + // upto 255 versions + unsigned char x; + * this->This() >> x; + t = version_type(x); + } + void load_override(class_id_type & t, int){ + // upto 32K classes + int_least16_t x; + * this->This() >> x; + t = class_id_type(x); + } + void load_override(class_id_reference_type & t, int){ + // upto 32K classes + int_least16_t x; + * this->This() >> x; + t = class_id_reference_type(x); + } + void load_override(object_id_type & t, int){ + // upto 2G objects + uint_least32_t x; + * this->This() >> x; + t = object_id_type(x); + } + void load_override(object_reference_type & t, int){ + // upto 2G objects + uint_least32_t x; + * this->This() >> x; + t = object_reference_type(x); + } + void load_override(tracking_type & t, int){ + char x; + * this->This() >> x; + t = (0 != x); + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load_override(class_name_type & t, int); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(); + + basic_binary_iarchive(unsigned int flags) : + detail::common_iarchive<Archive>(flags) + {} +}; + +} // namespace archive +} // namespace boost + +#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas + +#endif // BOOST_ARCHIVE_BASIC_BINARY_IARCHIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_binary_iprimitive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_binary_iprimitive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_binary_iprimitive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,137 @@ +#ifndef BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP +#define BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_binary_iprimitive.hpp +// +// archives stored as native binary - this should be the fastest way +// to archive the state of a group of obects. It makes no attempt to +// convert to any canonical form. + +// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE +// ON PLATFORM APART FROM THE ONE THEY ARE CREATED ON + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#include <iosfwd> +#include <cassert> +#include <cstring> // std::memcpy +#include <cstddef> // std::size_t + +#include <string> + +#include <boost/config.hpp> +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::memcpy; + using ::size_t; +} // namespace std +#endif + +#include <boost/throw_exception.hpp> +#include <boost/limits.hpp> +#include <boost/cstdint.hpp> +#include <boost/io/ios_state.hpp> +#include <boost/scoped_ptr.hpp> + +#include <boost/archive/archive_exception.hpp> + +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////////// +// class binary_iarchive - read serialized objects from a input binary stream +template<class Archive, class IStream> +class basic_binary_iprimitive +{ +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + friend class load_access; +protected: +#else +public: +#endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast<Archive *>(this); + } + // native streams are always handled as bytes + IStream &is; + boost::scoped_ptr<std::locale> archive_locale; + io::basic_ios_locale_saver< + BOOST_DEDUCED_TYPENAME IStream::char_type, BOOST_DEDUCED_TYPENAME IStream::traits_type + > locale_saver; + + // main template for serilization of primitive types + template<class T> + void load(T & t){ + load_binary(& t, sizeof(T)); + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load(std::string &s); + #ifndef BOOST_NO_STD_WSTRING + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load(std::wstring &ws); + #endif + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load(char * t); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load(wchar_t * t); + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + basic_binary_iprimitive(IStream &is_, bool no_codecvt); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + ~basic_binary_iprimitive(); +public: + void + load_binary(void *address, std::size_t count); +}; + +template<class Archive, class IStream> +inline void +basic_binary_iprimitive<Archive, IStream>::load_binary( + void *address, + std::size_t count +){ + assert( + static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) >= count + ); + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + // note: an optimizer should eliminate the following for char files + std::size_t s = count / sizeof(BOOST_DEDUCED_TYPENAME IStream::char_type); + is.read( + static_cast<BOOST_DEDUCED_TYPENAME IStream::char_type *>(address), + s + ); + // note: an optimizer should eliminate the following for char files + s = count % sizeof(BOOST_DEDUCED_TYPENAME IStream::char_type); + if(0 < s){ + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + BOOST_DEDUCED_TYPENAME IStream::char_type t; + is.read(& t, 1); + std::memcpy(address, &t, s); + } +} + +} // namespace archive +} // namespace boost + +#include <boost/archive/detail/abi_suffix.hpp> // pop pragams + +#endif // BOOST_ARCHIVE_BINARY_IPRIMITIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_binary_oarchive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_binary_oarchive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_binary_oarchive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,123 @@ +#ifndef BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP +#define BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_binary_oarchive.hpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as native binary - this should be the fastest way +// to archive the state of a group of obects. It makes no attempt to +// convert to any canonical form. + +// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE +// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON + +#include <boost/config.hpp> +#include <boost/pfto.hpp> + +#include <boost/detail/workaround.hpp> +#include <boost/archive/detail/oserializer.hpp> +#include <boost/archive/detail/interface_oarchive.hpp> +#include <boost/archive/detail/common_oarchive.hpp> + +#include <boost/serialization/string.hpp> + +namespace boost { +namespace archive { + +////////////////////////////////////////////////////////////////////// +// class basic_binary_oarchive - write serialized objects to a binary output stream +// note: this archive has no pretensions to portability. Archive format +// may vary across machine architectures and compilers. About the only +// guarentee is that an archive created with this code will be readable +// by a program built with the same tools for the same machne. This class +// does have the virtue of buiding the smalles archive in the minimum amount +// of time. So under some circumstances it may be he right choice. + +///////////////////////////////////////////////////////////////////////// +// class basic_text_iarchive - read serialized objects from a input text stream +template<class Archive> +class basic_binary_oarchive : + public detail::common_oarchive<Archive> +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +public: +#elif defined(BOOST_MSVC) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; +protected: +#else + friend class detail::interface_oarchive<Archive>; +protected: +#endif + // any datatype not specifed below will be handled + // by this function + template<class T> + void save_override(T & t, BOOST_PFTO int) + { + archive::save(* this->This(), t); + } + // binary files don't include the optional information + void save_override(const class_id_optional_type & /* t */, int){} + + void save_override(const version_type & t, int){ + // upto 255 versions + // note:t.t resolves borland ambguity + unsigned char x = t.t; + * this->This() << x; + } + void save_override(const class_id_type & t, int){ + // upto 32K classes + int_least16_t x = t.t; + * this->This() << x; + } + void save_override(const class_id_reference_type & t, int){ + // upto 32K classes + int_least16_t x = t.t; + * this->This() << x; + } + void save_override(const object_id_type & t, int){ + // upto 2G objects + uint_least32_t x = t.t; + * this->This() << x; + } + void save_override(const object_reference_type & t, int){ + // upto 2G objects + uint_least32_t x = t.t; + * this->This() << x; + } + void save_override(const tracking_type & t, int){ + char x = t.t; + * this->This() << x; + } + + // explicitly convert to char * to avoid compile ambiguities + void save_override(const class_name_type & t, int){ + const std::string s(t); + * this->This() << s; + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(); + + basic_binary_oarchive(unsigned int flags) : + detail::common_oarchive<Archive>(flags) + {} +}; + +} // namespace archive +} // namespace boost + +#endif // BOOST_ARCHIVE_BASIC_BINARY_OARCHIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_binary_oprimitive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_binary_oprimitive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_binary_oprimitive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,129 @@ +#ifndef BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP +#define BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_binary_oprimitive.hpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as native binary - this should be the fastest way +// to archive the state of a group of obects. It makes no attempt to +// convert to any canonical form. + +// IN GENERAL, ARCHIVES CREATED WITH THIS CLASS WILL NOT BE READABLE +// ON PLATFORM APART FROM THE ONE THEY ARE CREATE ON + +#include <iosfwd> +#include <cassert> +#include <locale> +#include <cstddef> // size_t + +#include <boost/config.hpp> +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::size_t; +} // namespace std +#endif + +#include <boost/cstdint.hpp> +#include <boost/limits.hpp> +#include <boost/io/ios_state.hpp> +#include <boost/scoped_ptr.hpp> +#include <boost/throw_exception.hpp> + +#include <boost/archive/archive_exception.hpp> + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////// +// class basic_binary_oprimitive - binary output of prmitives + +template<class Archive, class OStream> +class basic_binary_oprimitive +{ +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + friend class save_access; +protected: +#else +public: +#endif + // return a pointer to the most derived class + Archive * This(){ + return static_cast<Archive *>(this); + } + // native binary streams are handled as bytes + OStream &os; + boost::scoped_ptr<std::locale> archive_locale; + io::basic_ios_locale_saver< + BOOST_DEDUCED_TYPENAME OStream::char_type, + BOOST_DEDUCED_TYPENAME OStream::traits_type + > locale_saver; + + // default saving of primitives. + template<class T> + void save(const T & t) + { + save_binary(& t, sizeof(T)); + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + save(const std::string &s); + #ifndef BOOST_NO_STD_WSTRING + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + save(const std::wstring &ws); + #endif + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + save(const char * t); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + save(const wchar_t * t); + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + basic_binary_oprimitive(OStream & os, bool no_codecvt); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + ~basic_binary_oprimitive(); +public: + void save_binary(const void *address, std::size_t count); +}; + +template<class Archive, class OStream> +inline void +basic_binary_oprimitive<Archive, OStream>::save_binary( + const void *address, + std::size_t count +){ + assert( + static_cast<std::size_t>((std::numeric_limits<std::streamsize>::max)()) >= count + ); + // note: if the following assertions fail + // a likely cause is that the output stream is set to "text" + // mode where by cr characters recieve special treatment. + // be sure that the output stream is opened with ios::binary + if(os.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + // figure number of elements to output - round up + count = ( count + sizeof(BOOST_DEDUCED_TYPENAME OStream::char_type) - 1) + / sizeof(BOOST_DEDUCED_TYPENAME OStream::char_type); + os.write( + static_cast<const BOOST_DEDUCED_TYPENAME OStream::char_type *>(address), + count + ); + assert(os.good()); +} + +} //namespace boost +} //namespace archive + +#endif // BOOST_ARCHIVE_BASIC_BINARY_OPRIMITIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_text_iarchive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_text_iarchive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_text_iarchive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,87 @@ +#ifndef BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP +#define BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_text_iarchive.hpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as text - note these ar templated on the basic +// stream templates to accommodate wide (and other?) kind of characters +// +// note the fact that on libraries without wide characters, ostream is +// is not a specialization of basic_ostream which in fact is not defined +// in such cases. So we can't use basic_ostream<IStream::char_type> but rather +// use two template parameters + +#include <boost/config.hpp> +#include <boost/pfto.hpp> +#include <boost/detail/workaround.hpp> + +#include <boost/archive/detail/iserializer.hpp> +#include <boost/archive/detail/interface_iarchive.hpp> +#include <boost/archive/detail/common_iarchive.hpp> + +#include <boost/serialization/string.hpp> + +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////// +// class basic_text_iarchive - read serialized objects from a input text stream +template<class Archive> +class basic_text_iarchive : + public detail::common_iarchive<Archive> +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +public: +#elif defined(BOOST_MSVC) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_iarchive<Archive>; +protected: +#else + friend class detail::interface_iarchive<Archive>; +protected: +#endif + // intermediate level to support override of operators + // fot templates in the absence of partial function + // template ordering + template<class T> + void load_override(T & t, BOOST_PFTO int){ + archive::load(* this->This(), t); + } + // text file don't include the optional information + void load_override(class_id_optional_type & /*t*/, int){} + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load_override(class_name_type & t, int); + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(void); + + basic_text_iarchive(unsigned int flags) : + detail::common_iarchive<Archive>(flags) + {} + + ~basic_text_iarchive(){} +}; + +} // namespace archive +} // namespace boost + +#include <boost/archive/detail/abi_suffix.hpp> // pops abi_suffix.hpp pragmas + +#endif // BOOST_ARCHIVE_BASIC_TEXT_IARCHIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_text_iprimitive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_text_iprimitive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_text_iprimitive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,130 @@ +#ifndef BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP +#define BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_text_iprimitive.hpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as text - note these ar templated on the basic +// stream templates to accommodate wide (and other?) kind of characters +// +// note the fact that on libraries without wide characters, ostream is +// is not a specialization of basic_ostream which in fact is not defined +// in such cases. So we can't use basic_ostream<IStream::char_type> but rather +// use two template parameters + +#include <cassert> +#include <locale> +#include <cstddef> // size_t + +#include <boost/config.hpp> +#if defined(BOOST_NO_STDC_NAMESPACE) +namespace std{ + using ::size_t; + #if ! defined(BOOST_DINKUMWARE_STDLIB) && ! defined(__SGI_STL_PORT) + using ::locale; + #endif +} // namespace std +#endif + +#include <boost/detail/workaround.hpp> +#if BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) +#include <boost/archive/dinkumware.hpp> +#endif + +#include <boost/throw_exception.hpp> +#include <boost/limits.hpp> +#include <boost/io/ios_state.hpp> +#include <boost/scoped_ptr.hpp> + +#include <boost/archive/archive_exception.hpp> + +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////// +// class basic_text_iarchive - load serialized objects from a input text stream +template<class IStream> +class basic_text_iprimitive +{ +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS +protected: +#else +public: +#endif + IStream &is; + io::ios_flags_saver flags_saver; + io::ios_precision_saver precision_saver; + boost::scoped_ptr<std::locale> archive_locale; + io::basic_ios_locale_saver< + BOOST_DEDUCED_TYPENAME IStream::char_type, BOOST_DEDUCED_TYPENAME IStream::traits_type + > locale_saver; + template<class T> + void load(T & t) + { + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + is >> t; + } + void load(unsigned char & t) + { + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + unsigned short int i; + is >> i; + t = static_cast<unsigned char>(i); + } + void load(signed char & t) + { + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + signed short int i; + is >> i; + t = static_cast<signed char>(i); + } + void load(char & t) + { + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + short int i; + is >> i; + t = static_cast<char>(i); + } + #ifndef BOOST_NO_INTRINSIC_WCHAR_T + void load(wchar_t & t) + { + if(is.fail()) + boost::throw_exception(archive_exception(archive_exception::stream_error)); + unsigned i; + is >> i; + t = static_cast<wchar_t>(i); + } + #endif + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + basic_text_iprimitive(IStream &is, bool no_codecvt); + BOOST_ARCHIVE_OR_WARCHIVE_DECL(BOOST_PP_EMPTY()) + ~basic_text_iprimitive(); +public: + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + load_binary(void *address, std::size_t count); +}; + +} // namespace archive +} // namespace boost + +#include <boost/archive/detail/abi_suffix.hpp> // pop pragams + +#endif // BOOST_ARCHIVE_BASIC_TEXT_IPRIMITIVE_HPP Added: trunk/otlkcon0/boost/archive/basic_text_oarchive.hpp =================================================================== --- trunk/otlkcon0/boost/archive/basic_text_oarchive.hpp (rev 0) +++ trunk/otlkcon0/boost/archive/basic_text_oarchive.hpp 2006-11-12 16:31:31 UTC (rev 502) @@ -0,0 +1,118 @@ +#ifndef BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP +#define BOOST_ARCHIVE_BASIC_TEXT_OARCHIVE_HPP + +// MS compatible compilers support #pragma once +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 +// basic_text_oarchive.hpp + +// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +// archives stored as text - note these ar templated on the basic +// stream templates to accommodate wide (and other?) kind of characters +// +// note the fact that on libraries without wide characters, ostream is +// is not a specialization of basic_ostream which in fact is not defined +// in such cases. So we can't use basic_ostream<OStream::char_type> but rather +// use two template parameters + +#include <cassert> +#include <boost/config.hpp> +#include <boost/pfto.hpp> +#include <boost/detail/workaround.hpp> + +#include <boost/archive/detail/oserializer.hpp> +#include <boost/archive/detail/interface_oarchive.hpp> +#include <boost/archive/detail/common_oarchive.hpp> + +#include <boost/serialization/string.hpp> + +#include <boost/archive/detail/abi_prefix.hpp> // must be the last header + +namespace boost { +namespace archive { + +///////////////////////////////////////////////////////////////////////// +// class basic_text_iarchive - read serialized objects from a input text stream +template<class Archive> +class basic_text_oarchive : + public detail::common_oarchive<Archive> +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ +|| BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560)) +public: +#elif defined(BOOST_MSVC) + // for some inexplicable reason insertion of "class" generates compile erro + // on msvc 7.1 + friend detail::interface_oarchive<Archive>; +protected: +#else + friend class detail::interface_oarchive<Archive>; +protected: +#endif + enum { + none, + eol, + space + } delimiter; + + void newline(){ + delimiter = eol; + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + newtoken(); + + // default processing - invoke serialization library + template<class T> + void save_override(T & t, BOOST_PFTO int) + { + archive::save(* this->This(), t); + } + + // start new objects on a new line + void save_override(const object_id_type & t, int){ + this->This()->newline(); + // and and invoke prmitive to underlying value + this->This()->save(t.t); + } + + void save_override(const object_reference_type & t, int){ + this->This()->newline(); + // and and invoke prmitive to underlying value + this->This()->save(t.t); + } + + // text file don't include the optional information + void save_override(const class_id_optional_type & /* t */, int){} + + void save_override(const class_name_type & t, int){ + const std::string s(t); + * this->This() << s; + } + + BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) + init(); + + basic_text_oarchive(unsigned int flags) : + detail::c... [truncated message content] |
From: <ke...@us...> - 2006-11-09 01:48:18
|
Revision: 501 http://svn.sourceforge.net/otlkcon/?rev=501&view=rev Author: kervin Date: 2006-11-08 17:47:17 -0800 (Wed, 08 Nov 2006) Log Message: ----------- Working on O_IProp::GetProps() unit tests. Modified Paths: -------------- trunk/otlkcon0/otlkcon_registry.cpp trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp trunk/otlkcon0/tests/otlkcon_tests_iprop.h trunk/otlkcon0/tests/stdafx.h trunk/otlkcon0/tests/tests.cpp trunk/otlkcon0/tests/tests.vcproj Modified: trunk/otlkcon0/otlkcon_registry.cpp =================================================================== --- trunk/otlkcon0/otlkcon_registry.cpp 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/otlkcon_registry.cpp 2006-11-09 01:47:17 UTC (rev 501) @@ -68,7 +68,7 @@ = RegQueryValueEx( hk, key, NULL, NULL, (LPBYTE)&szBuf, &szBufSize); if( readRetVal != ERROR_SUCCESS ) { - OTLKCON_LOG_PRINT_LAST_ERROR(); + //OTLKCON_LOG_PRINT_LAST_ERROR(); return 0; } @@ -119,7 +119,7 @@ if( RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, access, &hk) != ERROR_SUCCESS ) { - OTLKCON_LOG_PRINT_LAST_ERROR(); + //OTLKCON_LOG_PRINT_LAST_ERROR(); return 0; } Modified: trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-09 01:47:17 UTC (rev 501) @@ -22,20 +22,11 @@ #include "stdafx.h" #include "otlkcon_tests_iprop.h" +#include <otlkcon_prop2str.h> -#include <MAPIUTIL.H> +using namespace std; -#include <boost/test/floating_point_comparison.hpp> -#include <boost/test/unit_test.hpp> -using boost::unit_test::test_suite; -using boost::unit_test::test_case; -using boost::test_tools::close_at_tolerance; - -// To test IMAPIProp::GetProps function -// First case: get the IPM folder's properties -// Second case: create a new folder and get its properties -// Third case: create a new message and get its properties -void otlkcon_test_IMAPIProp_GetProps_func() +void otlkcon_test_o_imapiprop_getprops_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -49,13 +40,15 @@ ULONG objType = 0; LPMAPIFOLDER tmpFolder; LPMESSAGE pMsg = NULL; - LPMAPIFOLDER pNewFolder = NULL; - - ULONG ulValues; - LPSPropValue pPropValues = NULL; + LPSPropValue lpPropValues = NULL; + char msgBuff[TEST_MSG_BUFF_MAX] = {0}; + string currTestName; + + BOOST_MESSAGE("Starting otlkcon_test_o_imapiprop_getprops_func()..." ); + // Initialize MAPI. result = MAPIInitialize(NULL); @@ -65,14 +58,14 @@ result = sess->GetMsgStoresTable(0, &msgStoreTable); result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); - // Open 'OpenConnector' + // Find Open Connector Message Store Provider rt.rt = RES_CONTENT; rt.res.resContent.lpProp = ∝ rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; prop.ulPropTag = PR_DISPLAY_NAME; - prop.Value.lpszW = L"OpenConnector"; + prop.Value.lpszW = L"Open Connector"; result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); switch(result) @@ -84,10 +77,16 @@ tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; break; + case MAPI_E_NOT_FOUND: - // Store was not found - return; + // Message store was not found + BOOST_CHECK_MESSAGE( result != MAPI_E_NOT_FOUND, + "ERROR: Message store was not found.\n" ); + + // We really can't continue after this + goto otlkcon_test_o_imapiprop_getprops_func_fail; break; + default: break; } @@ -101,50 +100,79 @@ (LPUNKNOWN *) &tmpFolder); /////////////////////////////////////////////////////////////////////////////////////////////////////// + // TEST 1 + currTestName = "test_IPM_folder_getprops"; + BOOST_MESSAGE( "\tTesting: " << currTestName << "\n" ); - std::string currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_IPMfolder_getprops"; - BOOST_MESSAGE( "Testing: " << currTestName ); + // Get all properties from the IPM receive folder + ulValues = 0; + result = tmpFolder->GetProps(NULL,0,&ulValues,&lpPropValues); - // Get properties, first case - // Get properties of the IPM receive folder - result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + // Prepare the error message + _snprintf_s( msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "o_imapiprop::GetProps failed, result was 0x%0.8X\n", result ); + + // Check that the GetProps() returned ok. + BOOST_CHECK_MESSAGE( SUCCEEDED(result), msgBuff ); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); + // Redundant but important for consistant formating and function + // flow. + if( FAILED(result) ) + { + // FIXME: Should display GetLastError() on failure. + ; + } - /////////////////////////////////////////////////////////////////////////////////////////////////////// + otlkcon_prop2str *prop2str = new otlkcon_prop2str(); + prop2str->init(MAPIAllocateBuffer, MAPIFreeBuffer); - // Create new folder - result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name - NULL, // Comment - NULL, - OPEN_IF_EXISTS, - &pNewFolder); + // Check that the returned values are what we expected + // in the returned property values array + for( ULONG i=0; i<ulValues; i++ ) + { + // Get the property name if we can + char *propName = prop2str->get( lpPropValues[i].ulPropTag ); + if( propName ) + { + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tGot 0x%0.8X ( %s )\n", + lpPropValues[i].ulPropTag, propName); + } + else + _snprintf_s(msgBuff, TEST_MSG_BUFF_MAX, TEST_MSG_BUFF_MAX-1, + "\tGot 0x%0.8X\n", + lpPropValues[i].ulPropTag); - - currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_folder_getprops"; - BOOST_MESSAGE( "Testing: " << currTestName ); + BOOST_MESSAGE( msgBuff ); - // Get properties, second case - // Create a new folder inside the IPM receive folder then try to get its properties - result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); + // Show value if we can + switch( PROP_TYPE(lpPropValues[i].ulPropTag) ) + { + case PT_STRING8: + break; - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); + default: + ; + } + } /////////////////////////////////////////////////////////////////////////////////////////////////////// + // TEST 2 - // Create a message - result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + // TODO: Create a second test. - currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_message_getprops"; - BOOST_MESSAGE( "Testing: " << currTestName ); +// Successs condition. +otlkcon_test_o_imapiprop_getprops_func_end: + BOOST_MESSAGE( "\nSUCCEEDED: otlkcon_test_o_imapiprop_getprops_func\n" ); + goto otlkcon_test_o_imapiprop_getprops_func_cleanup; - // Get properties, third case - // Create a new message, then try to get its propeties - result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); +// Fail condition +otlkcon_test_o_imapiprop_getprops_func_fail: + BOOST_MESSAGE( "\nFAILED: otlkcon_test_o_imapiprop_getprops_func\n" ); + goto otlkcon_test_o_imapiprop_getprops_func_cleanup; - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); - - // Cleanup +// Cleanup +otlkcon_test_o_imapiprop_getprops_func_cleanup: if (pMsg) pMsg->Release(); if (pNewFolder) @@ -155,15 +183,14 @@ tmpMsgStore->Release(); if (sess) sess->Release(); - MAPIUninitialize(); - + MAPIUninitialize(); } -// To test IMAPIProp::GetPropList function +// To test o_imapiprop::GetPropList function // First case: get the IPM folder's properties list // Second case: create a new folder and get its properties list // Third case: create a new message and get its properties list -void otlkcon_test_IMAPIProp_GetPropList_func() +void otlkcon_test_o_imapiprop_GetPropList_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -229,14 +256,14 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_IPMfolder_getproplist"; + std::string currTestName = "otlkcon_test_o_o_imapiprop_GetPropList_func::test_IPMfolder_getproplist"; BOOST_MESSAGE( "Testing: " << currTestName ); // Get Prop list, first case // Get properties list of the IPM receive folder result = tmpFolder->GetPropList(MAPI_UNICODE,&propTags); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_o_imapiprop::GetPropList failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -248,28 +275,28 @@ &pNewFolder); - currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_folder_getproplist"; + currTestName = "otlkcon_test_o_o_imapiprop_GetPropList_func::test_folder_getproplist"; BOOST_MESSAGE( "Testing: " << currTestName ); // Get Prop list, second case // Create a new folder inside the IPM receive folder then try to get its properties list result = pNewFolder->GetPropList(MAPI_UNICODE,&propTags); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_o_imapiprop::GetPropList failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// // Create a message result = pNewFolder->CreateMessage(NULL, 0, &pMsg); - currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_message_getproplist"; + currTestName = "otlkcon_test_o_o_imapiprop_GetPropList_func::test_message_getproplist"; BOOST_MESSAGE( "Testing: " << currTestName ); // Get Prop list, third case // Create a new message, then try to get its propeties list result = pMsg->GetPropList(MAPI_UNICODE,&propTags); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_o_imapiprop::GetPropList failed, result was " << result); // Cleanup if (pMsg) @@ -285,11 +312,11 @@ MAPIUninitialize(); } -// To test IMAPIProp::SetProps function +// To test o_o_imapiprop::SetProps function // First case: set the IPM folder's PR_DISPLAY_NAME property then recheck the value // Second case: create a new folder and set its PR_DISPLAY_NAME property then recheck the value // Third case: create a new message and set its PR_DISPLAY_NAME property then recheck the value -void otlkcon_test_IMAPIProp_SetProps_func() +void otlkcon_test_o_o_imapiprop_SetProps_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -356,7 +383,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_IPMfolder_setprops"; + std::string currTestName = "otlkcon_test_o_o_imapiprop_SetProps_func::test_IPMfolder_setprops"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, first case @@ -370,7 +397,7 @@ // Set props result = tmpFolder->SetProps(newUlVals, pNewProps, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_o_imapiprop::SetProps failed, result was " << result); // Save result = tmpFolder->SaveChanges(0); @@ -379,7 +406,7 @@ result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, - "IMAPIProp::SetProps works incorrectly"); + "o_imapiprop::SetProps works incorrectly"); /////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -390,7 +417,7 @@ OPEN_IF_EXISTS, &pNewFolder); - currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_folder_setprops"; + currTestName = "otlkcon_test_o_imapiprop_SetProps_func::test_folder_setprops"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, second case @@ -399,7 +426,7 @@ // Set props result = pNewFolder->SetProps(newUlVals, pNewProps, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::SetProps failed, result was " << result); // Save result = pNewFolder->SaveChanges(0); @@ -408,14 +435,14 @@ result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, - "IMAPIProp::SetProps works incorrectly"); + "o_imapiprop::SetProps works incorrectly"); /////////////////////////////////////////////////////////////////////////////////////////////////////// // Create a message result = pNewFolder->CreateMessage(NULL, 0, &pMsg); - currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_message_setprops"; + currTestName = "otlkcon_test_o_imapiprop_SetProps_func::test_message_setprops"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, third case @@ -424,7 +451,7 @@ // Set props result = pMsg->SetProps(newUlVals, pNewProps, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::SetProps failed, result was " << result); // Save result = pMsg->SaveChanges(0); @@ -433,7 +460,7 @@ result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, - "IMAPIProp::SetProps works incorrectly"); + "o_imapiprop::SetProps works incorrectly"); // Cleanup if (pMsg) @@ -450,11 +477,11 @@ } -// To test IMAPIProp::SaveChanges function +// To test o_imapiprop::SaveChanges function // First case: set the IPM folder's PR_DISPLAY_NAME property and save changes // Second case: create a new folder and set its PR_DISPLAY_NAME property and save changes // Third case: create a new message and set its PR_DISPLAY_NAME property and save changes -void otlkcon_test_IMAPIProp_SaveChanges_func() +void otlkcon_test_o_imapiprop_SaveChanges_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -521,7 +548,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_IPMfolder_savechanges"; + std::string currTestName = "otlkcon_test_o_imapiprop_SaveChanges_func::test_IPMfolder_savechanges"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, first case @@ -538,7 +565,7 @@ // Save result = tmpFolder->SaveChanges(0); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::SaveChanges failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -549,7 +576,7 @@ OPEN_IF_EXISTS, &pNewFolder); - currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_folder_savechanges"; + currTestName = "otlkcon_test_o_imapiprop_SaveChanges_func::test_folder_savechanges"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, second case @@ -560,7 +587,7 @@ // Save result = pNewFolder->SaveChanges(0); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::SaveChanges failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -568,7 +595,7 @@ // Create a message result = pNewFolder->CreateMessage(NULL, 0, &pMsg); - currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_message_savechanges"; + currTestName = "otlkcon_test_o_imapiprop_SaveChanges_func::test_message_savechanges"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties, third case @@ -579,7 +606,7 @@ // Save result = pMsg->SaveChanges(0); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::SaveChanges failed, result was " << result); // Cleanup if (pMsg) @@ -595,7 +622,7 @@ MAPIUninitialize(); } -// To test IMAPIProp::DeleteProps function +// To test o_imapiprop::DeleteProps function // First case: create a new message, set a single property, delete it and check for the /// number of remaining properties (should be 0) // @@ -604,7 +631,7 @@ // // Third case: create a new message, set a two properties, delete both of them and check for the /// number of remaining properties (should be 0) -void otlkcon_test_IMAPIProp_DeleteProps_func() +void otlkcon_test_o_imapiprop_DeleteProps_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -669,7 +696,7 @@ result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, (LPUNKNOWN *) &tmpFolder); - std::string currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteSingleProp"; + std::string currTestName = "otlkcon_test_o_imapiprop_DeleteProps_func::test_folder_deleteSingleProp"; BOOST_MESSAGE( "Testing: " << currTestName ); /////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -702,7 +729,7 @@ result = pMsg->DeleteProps(&deleteTagArray,NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::DeleteProps failed, result was " << result); // Save result = pMsg->SaveChanges(0); @@ -710,11 +737,11 @@ //recheck result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); - BOOST_REQUIRE_MESSAGE( ulValues != 0, "IMAPIProp::DeleteProps works incorrectly"); + BOOST_REQUIRE_MESSAGE( ulValues != 0, "o_imapiprop::DeleteProps works incorrectly"); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteOneProp"; + currTestName = "otlkcon_test_o_imapiprop_DeleteProps_func::test_folder_deleteOneProp"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties for deleting, second case - deleting one out of two properties @@ -737,7 +764,7 @@ deleteTagArray.aulPropTag[0] = PR_SUBJECT; result = pMsg->DeleteProps(&deleteTagArray,NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::DeleteProps failed, result was " << result); // Save result = pMsg->SaveChanges(0); @@ -745,11 +772,11 @@ //recheck result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); - BOOST_REQUIRE_MESSAGE( ulValues != 1, "IMAPIProp::DeleteProps works incorrectly"); + BOOST_REQUIRE_MESSAGE( ulValues != 1, "o_imapiprop::DeleteProps works incorrectly"); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteBothProp"; + currTestName = "otlkcon_test_o_imapiprop_DeleteProps_func::test_folder_deleteBothProp"; BOOST_MESSAGE( "Testing: " << currTestName ); // Set properties for deleting, second case - deleting both two properties @@ -773,7 +800,7 @@ deleteTagArray.aulPropTag[0] = PR_SUBJECT_PREFIX; result = pMsg->DeleteProps(&deleteTagArray,NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::DeleteProps failed, result was " << result); // Save result = pMsg->SaveChanges(0); @@ -781,7 +808,7 @@ //recheck result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); - BOOST_REQUIRE_MESSAGE( ulValues != 0, "IMAPIProp::DeleteProps works incorrectly"); + BOOST_REQUIRE_MESSAGE( ulValues != 0, "o_imapiprop::DeleteProps works incorrectly"); // Cleanup if (pMsg) @@ -797,9 +824,9 @@ MAPIUninitialize(); } -// To test IMAPIProp::OpenProperty function +// To test o_imapiprop::OpenProperty function // Create a new message with attachment, open the attachment property -void otlkcon_test_IMAPIProp_OpenProperty_func() +void otlkcon_test_o_imapiprop_OpenProperty_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -871,7 +898,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_OpenProperty_func::test_message_openproperty"; + std::string currTestName = "otlkcon_test_o_imapiprop_OpenProperty_func::test_message_openproperty"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -901,7 +928,7 @@ (LPIID)&IID_IStorage, 0, MAPI_CREATE | MAPI_MODIFY,(LPUNKNOWN *)&pstg); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::OpenProperty failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::OpenProperty failed, result was " << result); // Cleanup if (pMsg) @@ -917,11 +944,11 @@ MAPIUninitialize(); } -// To test IMAPIProp::CopyProps function +// To test o_imapiprop::CopyProps function // First case, create two folders, copy the PR_DISPLAY_NAME property from one to another // Second case, create two messages, copy the PR_DISPLAY_NAME property from one to another // Third case, create two messages, copy the PR_DISPLAY_NAME and PR_SUBJECT properties from one to another -void otlkcon_test_IMAPIProp_CopyProps_func() +void otlkcon_test_o_imapiprop_CopyProps_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -986,7 +1013,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_folder_copyprops"; + std::string currTestName = "otlkcon_test_o_imapiprop_CopyProps_func::test_folder_copyprops"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -1013,11 +1040,11 @@ result = ((LPMAPIPROP) pNewFolder)->CopyProps(&tagArray, NULL, NULL, &IID_IMAPIProp, pAnotherFolder, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyProps failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_message_copyoneprop"; + currTestName = "otlkcon_test_o_imapiprop_CopyProps_func::test_message_copyoneprop"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create a message @@ -1031,11 +1058,11 @@ &IID_IMAPIProp, pAnotherFolder, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyProps failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_message_copytwoprops"; + currTestName = "otlkcon_test_o_imapiprop_CopyProps_func::test_message_copytwoprops"; BOOST_MESSAGE( "Testing: " << currTestName ); // Copy properties, third case @@ -1047,7 +1074,7 @@ &IID_IMAPIProp, pAnotherFolder, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyProps failed, result was " << result); // Cleanup if (pMsg) @@ -1064,11 +1091,11 @@ } -// To test IMAPIProp::CopyTo function +// To test o_imapiprop::CopyTo function // First case, copy all properties from IPM folder to a newly created folder // Second case, copy all properties between two newly created folders // Third case, copy all properties between two newly created messages -void otlkcon_test_IMAPIProp_CopyTo_func() +void otlkcon_test_o_imapiprop_CopyTo_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -1133,7 +1160,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_folder_copyfromIPMfolder"; + std::string currTestName = "otlkcon_test_o_imapiprop_CopyTo_func::test_folder_copyfromIPMfolder"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -1147,12 +1174,12 @@ result = ((LPMAPIPROP) tmpFolder)->CopyTo(0, NULL, NULL, NULL, NULL, (LPIID) &IID_IMessage, pNewFolder, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyTo failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_folder_copyfromfolder"; + currTestName = "otlkcon_test_o_imapiprop_CopyTo_func::test_folder_copyfromfolder"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create another folder @@ -1167,11 +1194,11 @@ result = ((LPMAPIPROP) pNewFolder)->CopyTo(0, NULL, NULL, NULL, NULL, (LPIID) &IID_IMessage, pAnotherFolder, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyTo failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_message_copyto"; + currTestName = "otlkcon_test_o_imapiprop_CopyTo_func::test_message_copyto"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create a message @@ -1184,7 +1211,7 @@ result = ((LPMAPIPROP) pMsg)->CopyTo(0, NULL, NULL, NULL, NULL, (LPIID) &IID_IMessage, pAnotherMsg, 0, NULL); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::CopyTo failed, result was " << result); // Cleanup @@ -1202,11 +1229,11 @@ } -// To test IMAPIProp::GetNamesFromIDs function +// To test o_imapiprop::GetNamesFromIDs function // First case, get name of properties ID PR_DISPLAY_NAME of the IPM folder // Second case, get name of properties ID PR_DISPLAY_NAME of the newly created folder // Third case, get name of properties ID PR_DISPLAY_NAME of the newly created message -void otlkcon_test_IMAPIProp_GetNamesFromIDs_func() +void otlkcon_test_o_imapiprop_GetNamesFromIDs_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -1271,7 +1298,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_IPMfolder_getnamesfromids"; + std::string currTestName = "otlkcon_test_o_imapiprop_GetNamesFromIDs_func::test_IPMfolder_getnamesfromids"; BOOST_MESSAGE( "Testing: " << currTestName ); // First case @@ -1286,11 +1313,11 @@ result = tmpFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetNamesFromIDs failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_folder_getnamesfromids"; + currTestName = "otlkcon_test_o_imapiprop_GetNamesFromIDs_func::test_folder_getnamesfromids"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -1305,11 +1332,11 @@ // Get name of properties ID PR_DISPLAY_NAME of the newly created folder result = pNewFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetNamesFromIDs failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_message_getnamesfromids"; + currTestName = "otlkcon_test_o_imapiprop_GetNamesFromIDs_func::test_message_getnamesfromids"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create a message @@ -1320,7 +1347,7 @@ result = pMsg->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetNamesFromIDs failed, result was " << result); // Cleanup if (pMsg) @@ -1336,11 +1363,11 @@ MAPIUninitialize(); } -// To test IMAPIProp::GetNamesFromIDs function +// To test o_imapiprop::GetNamesFromIDs function // First case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the IPM folder // Second case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created folder // Third case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created message -void otlkcon_test_IMAPIProp_GetIDsFromNames_func() +void otlkcon_test_o_imapiprop_GetIDsFromNames_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -1405,7 +1432,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_IPMfolder_getidsfromnames"; + std::string currTestName = "otlkcon_test_o_imapiprop_GetIDsFromNames_func::test_IPMfolder_getidsfromnames"; BOOST_MESSAGE( "Testing: " << currTestName ); // First case @@ -1421,11 +1448,11 @@ result = tmpFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); result = tmpFolder->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetIDsFromNames failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_folder_getidsfromnames"; + currTestName = "otlkcon_test_o_imapiprop_GetIDsFromNames_func::test_folder_getidsfromnames"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -1441,11 +1468,11 @@ result = pNewFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); result = pNewFolder->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetIDsFromNames failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_message_getidsfromnames"; + currTestName = "otlkcon_test_o_imapiprop_GetIDsFromNames_func::test_message_getidsfromnames"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create a message @@ -1457,7 +1484,7 @@ result = pMsg->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetIDsFromNames failed, result was " << result); // Cleanup if (pMsg) @@ -1473,8 +1500,8 @@ MAPIUninitialize(); } -// To test IMAPIProp::GetLastError function -void otlkcon_test_IMAPIProp_GetLastError_func() +// To test o_imapiprop::GetLastError function +void otlkcon_test_o_imapiprop_GetLastError_func() { HRESULT result; LPMAPISESSION sess = NULL; @@ -1541,7 +1568,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_IPMfolder_getlasterror"; + std::string currTestName = "otlkcon_test_o_imapiprop_GetLastError_func::test_IPMfolder_getlasterror"; BOOST_MESSAGE( "Testing: " << currTestName ); // GetLastError, first case @@ -1552,11 +1579,11 @@ result = tmpFolder->GetLastError(result, MAPI_UNICODE, lppError); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetLastError failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_folder_getlasterror"; + currTestName = "otlkcon_test_o_imapiprop_GetLastError_func::test_folder_getlasterror"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create new folder @@ -1573,11 +1600,11 @@ result = pNewFolder->GetLastError(result, MAPI_UNICODE, lppError); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetLastError failed, result was " << result); /////////////////////////////////////////////////////////////////////////////////////////////////////// - currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_message_getlasterror"; + currTestName = "otlkcon_test_o_imapiprop_GetLastError_func::test_message_getlasterror"; BOOST_MESSAGE( "Testing: " << currTestName ); // Create a message @@ -1588,7 +1615,7 @@ result = pMsg->GetLastError(result, MAPI_UNICODE, lppError); - BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + BOOST_REQUIRE_MESSAGE( result != S_OK, "o_imapiprop::GetLastError failed, result was " << result); // Cleanup if (pMsg) Modified: trunk/otlkcon0/tests/otlkcon_tests_iprop.h =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_iprop.h 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/tests/otlkcon_tests_iprop.h 2006-11-09 01:47:17 UTC (rev 501) @@ -22,4 +22,18 @@ #pragma once -void otlkcon_test_iprop_create_func(); \ No newline at end of file +#include <otlkcon_guid.h> + +#include <string.h> +#include <mapiutil.h> + +#include <boost/test/floating_point_comparison.hpp> +#include <boost/test/unit_test.hpp> + +#define TEST_MSG_BUFF_MAX 1024 + +void otlkcon_test_iprop_create_func(); + +void otlkcon_test_o_imapiprop_getprops_func(); + + Modified: trunk/otlkcon0/tests/stdafx.h =================================================================== --- trunk/otlkcon0/tests/stdafx.h 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/tests/stdafx.h 2006-11-09 01:47:17 UTC (rev 501) @@ -5,6 +5,8 @@ #pragma once +#include <otlkcon_guid.h> + #include <windows.h> #include <mapi.h> @@ -14,4 +16,5 @@ #include <iostream> #include <tchar.h> + // TODO: reference additional headers your program requires here Modified: trunk/otlkcon0/tests/tests.cpp =================================================================== --- trunk/otlkcon0/tests/tests.cpp 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/tests/tests.cpp 2006-11-09 01:47:17 UTC (rev 501) @@ -36,5 +36,8 @@ // Test the O_IMsgStore::Create() function test->add( BOOST_TEST_CASE( &otlkcon_test_mstore_create_func ) ); + // Test the O_IProp::GetProps() function + test->add( BOOST_TEST_CASE( &otlkcon_test_o_imapiprop_getprops_func ) ); + return test; } Modified: trunk/otlkcon0/tests/tests.vcproj =================================================================== --- trunk/otlkcon0/tests/tests.vcproj 2006-11-07 02:01:10 UTC (rev 500) +++ trunk/otlkcon0/tests/tests.vcproj 2006-11-09 01:47:17 UTC (rev 501) @@ -217,7 +217,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="AllocProfiler.lib" + AdditionalDependencies="AllocProfiler.lib mapi32.lib" OutputFile="$(OutDir)/tests.exe" LinkIncremental="2" AdditionalLibraryDirectories="$(OutDir)" @@ -273,6 +273,14 @@ > </File> <File + RelativePath="..\otlkcon_prop2str.cpp" + > + </File> + <File + RelativePath="..\otlkcon_registry.cpp" + > + </File> + <File RelativePath=".\otlkcon_tests_allocprofiler.cpp" > </File> @@ -371,6 +379,14 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > <File + RelativePath="..\otlkcon_prop2str.h" + > + </File> + <File + RelativePath="..\otlkcon_registry.h" + > + </File> + <File RelativePath=".\otlkcon_tests.h" > </File> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-07 02:01:16
|
Revision: 500 http://svn.sourceforge.net/otlkcon/?rev=500&view=rev Author: kervin Date: 2006-11-06 18:01:10 -0800 (Mon, 06 Nov 2006) Log Message: ----------- [Contrib] First O_IProp tests. Modified Paths: -------------- trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp trunk/otlkcon0/tests/stdafx.h Modified: trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp =================================================================== --- trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-06 02:00:11 UTC (rev 499) +++ trunk/otlkcon0/tests/otlkcon_tests_iprop.cpp 2006-11-07 02:01:10 UTC (rev 500) @@ -23,7 +23,1584 @@ #include "stdafx.h" #include "otlkcon_tests_iprop.h" -void otlkcon_test_iprop_create_func() +#include <MAPIUTIL.H> + +#include <boost/test/floating_point_comparison.hpp> +#include <boost/test/unit_test.hpp> +using boost::unit_test::test_suite; +using boost::unit_test::test_case; +using boost::test_tools::close_at_tolerance; + +// To test IMAPIProp::GetProps function +// First case: get the IPM folder's properties +// Second case: create a new folder and get its properties +// Third case: create a new message and get its properties +void otlkcon_test_IMAPIProp_GetProps_func() { - ; -} \ No newline at end of file + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + ULONG ulValues; + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_IPMfolder_getprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get properties, first case + // Get properties of the IPM receive folder + result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + + currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_folder_getprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get properties, second case + // Create a new folder inside the IPM receive folder then try to get its properties + result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + currTestName = "otlkcon_test_IMAPIProp_GetProps_func::test_message_getprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get properties, third case + // Create a new message, then try to get its propeties + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetProps failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); + +} + +// To test IMAPIProp::GetPropList function +// First case: get the IPM folder's properties list +// Second case: create a new folder and get its properties list +// Third case: create a new message and get its properties list +void otlkcon_test_IMAPIProp_GetPropList_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + LPSPropTagArray propTags; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_IPMfolder_getproplist"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get Prop list, first case + // Get properties list of the IPM receive folder + result = tmpFolder->GetPropList(MAPI_UNICODE,&propTags); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + + currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_folder_getproplist"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get Prop list, second case + // Create a new folder inside the IPM receive folder then try to get its properties list + result = pNewFolder->GetPropList(MAPI_UNICODE,&propTags); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + currTestName = "otlkcon_test_IMAPIProp_GetPropList_func::test_message_getproplist"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Get Prop list, third case + // Create a new message, then try to get its propeties list + result = pMsg->GetPropList(MAPI_UNICODE,&propTags); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetPropList failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::SetProps function +// First case: set the IPM folder's PR_DISPLAY_NAME property then recheck the value +// Second case: create a new folder and set its PR_DISPLAY_NAME property then recheck the value +// Third case: create a new message and set its PR_DISPLAY_NAME property then recheck the value +void otlkcon_test_IMAPIProp_SetProps_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + ULONG ulValues,newUlVals; + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_IPMfolder_setprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, first case + //set the IPM folder's PR_DISPLAY_NAME property, then recheck the value + SPropValue *pNewProps = new SPropValue[1]; + + pNewProps[0].ulPropTag = PR_DISPLAY_NAME; + pNewProps[0].Value.lpszA = "Testing string"; + newUlVals = 1; + + // Set props + result = tmpFolder->SetProps(newUlVals, pNewProps, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + + // Save + result = tmpFolder->SaveChanges(0); + + //recheck + result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, + "IMAPIProp::SetProps works incorrectly"); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_folder_setprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, second case + // create a new folder and set its PR_DISPLAY_NAME property, then recheck the value + + // Set props + result = pNewFolder->SetProps(newUlVals, pNewProps, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + + // Save + result = pNewFolder->SaveChanges(0); + + //recheck + result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, + "IMAPIProp::SetProps works incorrectly"); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + currTestName = "otlkcon_test_IMAPIProp_SetProps_func::test_message_setprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, third case + // create a new message and set its PR_DISPLAY_NAME property, then recheck the value + + // Set props + result = pMsg->SetProps(newUlVals, pNewProps, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SetProps failed, result was " << result); + + // Save + result = pMsg->SaveChanges(0); + + //recheck + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( strcmp(pPropValues[0].Value.lpszA,"Testing string")!=0, + "IMAPIProp::SetProps works incorrectly"); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); + +} + +// To test IMAPIProp::SaveChanges function +// First case: set the IPM folder's PR_DISPLAY_NAME property and save changes +// Second case: create a new folder and set its PR_DISPLAY_NAME property and save changes +// Third case: create a new message and set its PR_DISPLAY_NAME property and save changes +void otlkcon_test_IMAPIProp_SaveChanges_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + ULONG newUlVals; + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_IPMfolder_savechanges"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, first case + // set the IPM folder's PR_DISPLAY_NAME property and save changes + SPropValue *pNewProps = new SPropValue[1]; + + pNewProps[0].ulPropTag = PR_DISPLAY_NAME; + pNewProps[0].Value.lpszA = "Testing string"; + newUlVals = 1; + + // Set props + result = tmpFolder->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = tmpFolder->SaveChanges(0); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_folder_savechanges"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, second case + // create a new folder and set its PR_DISPLAY_NAME property and save changes + + // Set props + result = pNewFolder->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = pNewFolder->SaveChanges(0); + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + currTestName = "otlkcon_test_IMAPIProp_SaveChanges_func::test_message_savechanges"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties, third case + // create a new message and set its PR_DISPLAY_NAME property and save changes + + // Set props + result = pMsg->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = pMsg->SaveChanges(0); + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::SaveChanges failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::DeleteProps function +// First case: create a new message, set a single property, delete it and check for the +/// number of remaining properties (should be 0) +// +// Second case: create a new message, set a two properties, delete one of them and check for the +/// number of remaining properties (should be 1) +// +// Third case: create a new message, set a two properties, delete both of them and check for the +/// number of remaining properties (should be 0) +void otlkcon_test_IMAPIProp_DeleteProps_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + ULONG ulValues,newUlVals; + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + std::string currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteSingleProp"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Set properties for deleting, first case - deleting the only property + SPropValue *pNewProps = new SPropValue[1]; + + pNewProps[0].ulPropTag = PR_SUBJECT; + pNewProps[0].Value.lpszA = "Testing string"; + newUlVals = 1; + + // Set props + result = pMsg->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = pMsg->SaveChanges(0); + + SPropTagArray deleteTagArray; + deleteTagArray.cValues = 1; + deleteTagArray.aulPropTag[0] = PR_SUBJECT; + + result = pMsg->DeleteProps(&deleteTagArray,NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + + // Save + result = pMsg->SaveChanges(0); + + //recheck + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( ulValues != 0, "IMAPIProp::DeleteProps works incorrectly"); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteOneProp"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties for deleting, second case - deleting one out of two properties + delete [] pNewProps; + pNewProps = new SPropValue[2]; + + pNewProps[0].ulPropTag = PR_SUBJECT; + pNewProps[0].Value.lpszA = "Testing string"; + pNewProps[0].ulPropTag = PR_SUBJECT_PREFIX; + pNewProps[0].Value.lpszA = "Fw:"; + newUlVals = 2; + + // Set props + result = pMsg->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = pMsg->SaveChanges(0); + + deleteTagArray.cValues = 1; + deleteTagArray.aulPropTag[0] = PR_SUBJECT; + + result = pMsg->DeleteProps(&deleteTagArray,NULL); + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + + // Save + result = pMsg->SaveChanges(0); + + //recheck + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( ulValues != 1, "IMAPIProp::DeleteProps works incorrectly"); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_DeleteProps_func::test_folder_deleteBothProp"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Set properties for deleting, second case - deleting both two properties + delete [] pNewProps; + pNewProps = new SPropValue[2]; + + pNewProps[0].ulPropTag = PR_SUBJECT; + pNewProps[0].Value.lpszA = "Testing string"; + pNewProps[0].ulPropTag = PR_SUBJECT_PREFIX; + pNewProps[0].Value.lpszA = "Fw:"; + newUlVals = 2; + + // Set props + result = pMsg->SetProps(newUlVals, pNewProps, NULL); + + // Save + result = pMsg->SaveChanges(0); + + deleteTagArray.cValues = 2; + deleteTagArray.aulPropTag[0] = PR_SUBJECT; + deleteTagArray.aulPropTag[0] = PR_SUBJECT_PREFIX; + + result = pMsg->DeleteProps(&deleteTagArray,NULL); + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::DeleteProps failed, result was " << result); + + // Save + result = pMsg->SaveChanges(0); + + //recheck + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + BOOST_REQUIRE_MESSAGE( ulValues != 0, "IMAPIProp::DeleteProps works incorrectly"); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::OpenProperty function +// Create a new message with attachment, open the attachment property +void otlkcon_test_IMAPIProp_OpenProperty_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + LPATTACH pAtt = NULL; + ULONG ulAttNum; + + LPSPropValue pPropValues = NULL; + + enum {METHOD,RENDERING,NUM_ATT_PROPS}; + SPropValue spvAttach[NUM_ATT_PROPS]; + LPSTORAGE pstg = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_OpenProperty_func::test_message_openproperty"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Create an attachment on the message + result = pMsg->CreateAttach(NULL, (ULONG)0, &ulAttNum, &pAtt); + + spvAttach[METHOD].ulPropTag = PR_ATTACH_METHOD; + spvAttach[METHOD].Value.l = ATTACH_OLE; + + spvAttach[RENDERING].ulPropTag = PR_RENDERING_POSITION; + spvAttach[RENDERING].Value.l = 0; + + // Save the properties we have set on the attachment + result = pAtt -> SetProps(NUM_ATT_PROPS,(LPSPropValue)&spvAttach,NULL); + + // Test open property + result = pAtt->OpenProperty(PR_ATTACH_DATA_OBJ, + (LPIID)&IID_IStorage, 0, + MAPI_CREATE | MAPI_MODIFY,(LPUNKNOWN *)&pstg); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::OpenProperty failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::CopyProps function +// First case, create two folders, copy the PR_DISPLAY_NAME property from one to another +// Second case, create two messages, copy the PR_DISPLAY_NAME property from one to another +// Third case, create two messages, copy the PR_DISPLAY_NAME and PR_SUBJECT properties from one to another +void otlkcon_test_IMAPIProp_CopyProps_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + LPMESSAGE pAnotherMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + LPMAPIFOLDER pAnotherFolder = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_folder_copyprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"SourceFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + // Create another folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"AnotherFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pAnotherFolder); + + + // Copy properties, first case + SPropTagArray tagArray; + + tagArray.cValues = 1; + tagArray.aulPropTag[0] = PR_DISPLAY_NAME; + + result = ((LPMAPIPROP) pNewFolder)->CopyProps(&tagArray, NULL, NULL, + &IID_IMAPIProp, pAnotherFolder, 0, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_message_copyoneprop"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Create another message + result = pNewFolder->CreateMessage(NULL, 0, &pAnotherMsg); + + // Copy properties, second case + result = ((LPMAPIPROP) pNewFolder)->CopyProps(&tagArray, NULL, NULL, + &IID_IMAPIProp, pAnotherFolder, 0, NULL); + + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_CopyProps_func::test_message_copytwoprops"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Copy properties, third case + tagArray.cValues = 2; + tagArray.aulPropTag[0] = PR_DISPLAY_NAME; + tagArray.aulPropTag[1] = PR_SUBJECT; + + result = ((LPMAPIPROP) pNewFolder)->CopyProps(&tagArray, NULL, NULL, + &IID_IMAPIProp, pAnotherFolder, 0, NULL); + + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyProps failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); + +} + +// To test IMAPIProp::CopyTo function +// First case, copy all properties from IPM folder to a newly created folder +// Second case, copy all properties between two newly created folders +// Third case, copy all properties between two newly created messages +void otlkcon_test_IMAPIProp_CopyTo_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + LPMESSAGE pAnotherMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + LPMAPIFOLDER pAnotherFolder = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_folder_copyfromIPMfolder"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"SourceFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + // Copy properties from IPM folder to the new folder, first case + result = ((LPMAPIPROP) tmpFolder)->CopyTo(0, NULL, NULL, NULL, NULL, + (LPIID) &IID_IMessage, pNewFolder, 0, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_folder_copyfromfolder"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create another folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"AnotherFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pAnotherFolder); + + + // Copy properties between two newly created folders, second case + result = ((LPMAPIPROP) pNewFolder)->CopyTo(0, NULL, NULL, NULL, NULL, + (LPIID) &IID_IMessage, pAnotherFolder, 0, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_CopyTo_func::test_message_copyto"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Create another message + result = pNewFolder->CreateMessage(NULL, 0, &pAnotherMsg); + + // Copy properties between two newly created messages, third case + result = ((LPMAPIPROP) pMsg)->CopyTo(0, NULL, NULL, NULL, NULL, + (LPIID) &IID_IMessage, pAnotherMsg, 0, NULL); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::CopyTo failed, result was " << result); + + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); + +} + +// To test IMAPIProp::GetNamesFromIDs function +// First case, get name of properties ID PR_DISPLAY_NAME of the IPM folder +// Second case, get name of properties ID PR_DISPLAY_NAME of the newly created folder +// Third case, get name of properties ID PR_DISPLAY_NAME of the newly created message +void otlkcon_test_IMAPIProp_GetNamesFromIDs_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_IPMfolder_getnamesfromids"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // First case + // Get name of properties ID PR_DISPLAY_NAME of the IPM folder + ULONG count = 0; + LPMAPINAMEID FAR * lppPropNames; + SPropTagArray tagArray; + LPSPropTagArray lpTagArray = &tagArray; + + tagArray.cValues = 1; + tagArray.aulPropTag[0] = PR_DISPLAY_NAME; + + result = tmpFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_folder_getnamesfromids"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + + // Second case + // Get name of properties ID PR_DISPLAY_NAME of the newly created folder + result = pNewFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetNamesFromIDs_func::test_message_getnamesfromids"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Third case + // Get name of properties ID PR_DISPLAY_NAME of the newly created message + + result = pMsg->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetNamesFromIDs failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::GetNamesFromIDs function +// First case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the IPM folder +// Second case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created folder +// Third case, get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created message +void otlkcon_test_IMAPIProp_GetIDsFromNames_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_IPMfolder_getidsfromnames"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // First case + // get id corresponding to the name of properties ID PR_DISPLAY_NAME of the IPM folder + ULONG count = 0; + LPMAPINAMEID FAR * lppPropNames; + SPropTagArray tagArray; + LPSPropTagArray lpTagArray = &tagArray; + + tagArray.cValues = 1; + tagArray.aulPropTag[0] = PR_DISPLAY_NAME; + + result = tmpFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + result = tmpFolder->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_folder_getidsfromnames"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + + // Second case + // get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created folder + result = pNewFolder->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + result = pNewFolder->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetIDsFromNames_func::test_message_getidsfromnames"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // Third case + // get id corresponding to the name of properties ID PR_DISPLAY_NAME of the newly created message + result = pMsg->GetNamesFromIDs(&lpTagArray, NULL, 0, &count, &lppPropNames); + result = pMsg->GetIDsFromNames(count, lppPropNames, MAPI_CREATE , &lpTagArray); + + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetIDsFromNames failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); +} + +// To test IMAPIProp::GetLastError function +void otlkcon_test_IMAPIProp_GetLastError_func() +{ + HRESULT result; + LPMAPISESSION sess = NULL; + LPMAPITABLE msgStoreTable; + SRestriction rt = {0}; + SPropValue prop = {0}; + LPSRowSet tmpRow; + LPENTRYID tmpEntryID; + ULONG tmpEntryIDSize; + LPMDB tmpMsgStore; + ULONG objType = 0; + LPMAPIFOLDER tmpFolder; + LPMESSAGE pMsg = NULL; + + LPMAPIFOLDER pNewFolder = NULL; + + + ULONG ulValues; + LPSPropValue pPropValues = NULL; + + // Initialize MAPI. + result = MAPIInitialize(NULL); + + // Logon to MAPI. + result = MAPILogonEx(NULL,NULL,NULL,MAPI_USE_DEFAULT ,&sess); + + result = sess->GetMsgStoresTable(0, &msgStoreTable); + result = HrQueryAllRows(msgStoreTable, NULL, NULL, NULL, 0, &tmpRow); + + // Open 'OpenConnector' + rt.rt = RES_CONTENT; + rt.res.resContent.lpProp = ∝ + rt.res.resContent.ulFuzzyLevel = FL_SUBSTRING | FL_IGNORECASE; + rt.res.resContent.ulPropTag = PR_DISPLAY_NAME; + + prop.ulPropTag = PR_DISPLAY_NAME; + prop.Value.lpszW = L"OpenConnector"; + + result = msgStoreTable->FindRow(&rt, BOOKMARK_BEGINNING, 0); + switch(result) + { + case S_OK: + case MAPI_W_POSITION_CHANGED: + //Folder found, return entryID + result = msgStoreTable->QueryRows(1, 0, &tmpRow); + tmpEntryID = (LPENTRYID)(tmpRow->aRow[0].lpProps->Value.bin.lpb); + tmpEntryIDSize = tmpRow->aRow[0].lpProps->Value.bin.cb; + break; + case MAPI_E_NOT_FOUND: + // Store was not found + return; + break; + default: + break; + } + + result = sess->OpenMsgStore(NULL,tmpEntryIDSize, tmpEntryID, NULL, MDB_WRITE, + &tmpMsgStore); + + result = tmpMsgStore->GetReceiveFolder("IPM", 0, &tmpEntryIDSize, &tmpEntryID, NULL); + + result = sess->OpenEntry(tmpEntryIDSize,tmpEntryID, NULL, MAPI_MODIFY, &objType, + (LPUNKNOWN *) &tmpFolder); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + std::string currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_IPMfolder_getlasterror"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // GetLastError, first case + result = tmpFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + LPMAPIERROR lpError; + LPMAPIERROR * lppError = &lpError; + + result = tmpFolder->GetLastError(result, MAPI_UNICODE, lppError); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_folder_getlasterror"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create new folder + result = tmpFolder->CreateFolder(FOLDER_GENERIC,"TestFolder", // Display name + NULL, // Comment + NULL, + OPEN_IF_EXISTS, + &pNewFolder); + + + + // GetLastError, second case + result = pNewFolder->GetProps(NULL,0,&ulValues,&pPropValues); + + result = pNewFolder->GetLastError(result, MAPI_UNICODE, lppError); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + + /////////////////////////////////////////////////////////////////////////////////////////////////////// + + currTestName = "otlkcon_test_IMAPIProp_GetLastError_func::test_message_getlasterror"; + BOOST_MESSAGE( "Testing: " << currTestName ); + + // Create a message + result = pNewFolder->CreateMessage(NULL, 0, &pMsg); + + // GetLastError, third case + result = pMsg->GetProps(NULL,0,&ulValues,&pPropValues); + + result = pMsg->GetLastError(result, MAPI_UNICODE, lppError); + + BOOST_REQUIRE_MESSAGE( result != S_OK, "IMAPIProp::GetLastError failed, result was " << result); + + // Cleanup + if (pMsg) + pMsg->Release(); + if (pNewFolder) + pNewFolder->Release(); + if (tmpFolder) + tmpFolder->Release(); + if (tmpMsgStore) + tmpMsgStore->Release(); + if (sess) + sess->Release(); + MAPIUninitialize(); + +} Modified: trunk/otlkcon0/tests/stdafx.h =================================================================== --- trunk/otlkcon0/tests/stdafx.h 2006-11-06 02:00:11 UTC (rev 499) +++ trunk/otlkcon0/tests/stdafx.h 2006-11-07 02:01:10 UTC (rev 500) @@ -5,7 +5,12 @@ #pragma once +#include <windows.h> +#include <mapi.h> +#include <mapix.h> +#include <mapiutil.h> + #include <iostream> #include <tchar.h> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-06 02:00:26
|
Revision: 499 http://svn.sourceforge.net/otlkcon/?rev=499&view=rev Author: kervin Date: 2006-11-05 18:00:11 -0800 (Sun, 05 Nov 2006) Log Message: ----------- Fixed config bug. Chased gui/config/account related crasher. Not found but related to truly new accounts. Turns out accounts hadn't been being deleted. Appointment folders still aren't being removed after the account is deleted from the gui config screen. This needs to be done at some point. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IMsgStore.cpp trunk/otlkcon0/mstore/mstore.cpp trunk/otlkcon0/otlkcon_gui.cpp trunk/otlkcon0/protocols/caldav/caldav.cpp Modified: trunk/otlkcon0/mstore/O_IMsgStore.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-11-05 14:55:09 UTC (rev 498) +++ trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-11-06 02:00:11 UTC (rev 499) @@ -728,7 +728,7 @@ goto loadforeignappointmentfolders_end; } - tmpIdW = (wchar_t *)memObj->malloc( MAX_PATH ); + tmpIdW = (wchar_t *)memObj->malloc( (MAX_PATH+1)*sizeof(wchar_t) ); sqlRes = sqlObj->buildQuery( &queryStr, "SELECT * FROM account_appointment_folder_mapping_table" ); sqlite3_prepare( sqlObj->databaseHandle, queryStr, -1, @@ -765,7 +765,7 @@ OTLKCON_DEBUGBREAK; } - _snwprintf_s( tmpIdW, MAX_PATH, MAX_PATH, L"%S", (*i).first.c_str()); + _snwprintf_s( tmpIdW, MAX_PATH+1, MAX_PATH, L"%S", (*i).first.c_str()); foreignAppointmentFolders.insert( pair<wstring,O_IFolder *>( wstring(tmpIdW), tmpFld ) ); } Modified: trunk/otlkcon0/mstore/mstore.cpp =================================================================== --- trunk/otlkcon0/mstore/mstore.cpp 2006-11-05 14:55:09 UTC (rev 498) +++ trunk/otlkcon0/mstore/mstore.cpp 2006-11-06 02:00:11 UTC (rev 499) @@ -113,7 +113,7 @@ lpMAPISup->GetMemAllocRoutines(&lpAllocateBuffer, &lpAllocateMore, &lpFreeBuffer); otlkcon_memory memObj( lpAllocateBuffer, lpAllocateMore, lpFreeBuffer ); - debugObj.Initialize(lpAllocateBuffer, lpFreeBuffer); + //debugObj.Initialize(lpAllocateBuffer, lpFreeBuffer); O_MessageServiceInit(lpAllocateBuffer); BOOL bUIAllowed = (SERVICE_UI_ALLOWED & ulFlags) || @@ -125,12 +125,13 @@ case MSG_SERVICE_CONFIGURE: { - if(SERVICE_UI_ALLOWED && ulFlags || - SERVICE_UI_ALWAYS && ulFlags) + if(SERVICE_UI_ALLOWED & ulFlags || + SERVICE_UI_ALWAYS & ulFlags) { } // if - otlkcon_config *conf = new otlkcon_config((HWND)ulUIParam, &memObj); + otlkcon_memory *confMem = new otlkcon_memory( &memObj ); + otlkcon_config *conf = new otlkcon_config((HWND)ulUIParam, confMem); OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"inside MSG_SERVICE_CONFIGURE.\n"); @@ -142,10 +143,16 @@ memset(&profTags,0, sizeof(profTags)); LPENTRYID profEID = NULL; LPSPropValue profProps = NULL; - wchar_t strBuff[MAX_PATH+1] = {0}; + wchar_t strBuffW[MAX_PATH+1] = {0}; + char strBuff[MAX_PATH+1] = {0}; char *profProviderDisplay = NULL, *profdataFile = NULL; MAPIUID *profMdbProvider = NULL, *profServiceUid = NULL, *profRecordKey = NULL; + SPropValue tempProps[50] = {0}; + ULONG ulProps = 0; + SBinary sbWrappedEntryID = {0}; + otlkcon_event_struct *event = NULL; + result = OpenProviderProfileSection(lpProviderAdmin, MAPI_STORE_PROVIDER, &lpProfileObj); if(SUCCEEDED(result)) { @@ -370,10 +377,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->id = strBuff; + conf->accounts[0]->id = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -389,10 +396,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->name = strBuff; + conf->accounts[0]->name = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -400,10 +407,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->user = strBuff; + conf->accounts[0]->user = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -411,10 +418,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->pass = strBuff; + conf->accounts[0]->pass = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -422,10 +429,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->uri = strBuff; + conf->accounts[0]->uri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -433,10 +440,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[0]->principleUri = strBuff; + conf->accounts[0]->principleUri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -469,10 +476,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->id = strBuff; + conf->accounts[1]->id = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -488,10 +495,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->name = strBuff; + conf->accounts[1]->name = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -499,10 +506,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->user = strBuff; + conf->accounts[1]->user = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -510,10 +517,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->pass = strBuff; + conf->accounts[1]->pass = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -521,10 +528,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->uri = strBuff; + conf->accounts[1]->uri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -532,10 +539,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[1]->principleUri = strBuff; + conf->accounts[1]->principleUri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -568,10 +575,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->id = strBuff; + conf->accounts[2]->id = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -587,10 +594,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->name = strBuff; + conf->accounts[2]->name = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -598,10 +605,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->user = strBuff; + conf->accounts[2]->user = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -609,10 +616,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->pass = strBuff; + conf->accounts[2]->pass = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -620,10 +627,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->uri = strBuff; + conf->accounts[2]->uri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -631,10 +638,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[2]->principleUri = strBuff; + conf->accounts[2]->principleUri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -667,10 +674,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->id = strBuff; + conf->accounts[3]->id = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -686,10 +693,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->name = strBuff; + conf->accounts[3]->name = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -697,10 +704,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->user = strBuff; + conf->accounts[3]->user = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -708,10 +715,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->pass = strBuff; + conf->accounts[3]->pass = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -719,10 +726,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->uri = strBuff; + conf->accounts[3]->uri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -730,10 +737,10 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_STRING8 ) { - _snwprintf_s( strBuff, MAX_PATH+1, + _snwprintf_s( strBuffW, MAX_PATH+1, MAX_PATH, L"%S", profProps[i].Value.lpszA); - conf->accounts[3]->principleUri = strBuff; + conf->accounts[3]->principleUri = strBuffW; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -749,7 +756,7 @@ { if( PROP_TYPE(profProps[i].ulPropTag) == PT_BOOLEAN ) { - conf->accounts[4]->abEnabled = profProps[i].Value.b; + conf->accounts[3]->abEnabled = profProps[i].Value.b; } } else if( PROP_ID(profProps[i].ulPropTag) @@ -811,11 +818,6 @@ result = MAPI_E_UNCONFIGURED; } // else - SPropValue tempProps[50] = {0}; - ULONG ulProps = 0; - SBinary sbWrappedEntryID = {0}; - otlkcon_event_struct *event = NULL; - if( conf->isDirty && S_OK == result ) { // Set profiles properties from gui. @@ -881,7 +883,6 @@ } // PR_PST_PATH - char strBuff[MAX_PATH+1] = {0}; _snprintf_s( strBuff, MAX_PATH+1, MAX_PATH, "%S", conf->dbFilename.c_str()); @@ -889,7 +890,8 @@ tempProps[ulProps++].Value.lpszA = memObj._strdup(strBuff); result = lpProfileObj->SetProps(ulProps, tempProps, NULL); - lpProfileObj->SaveChanges(0); + result = lpProfileObj->SaveChanges(0); + ulProps = 0; // FIXME: The path really should be stored in a single @@ -964,6 +966,11 @@ = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_1; tempProps[ulProps++].Value.lpszA = memObj._strdup(strBuff); } + else + { + // Currently the first account is never deleted. + ; + } // Account 2 if( conf->accounts.size() > 1 ) @@ -1020,7 +1027,35 @@ = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_2; tempProps[ulProps++].Value.lpszA = memObj._strdup(strBuff); } + else + { + // Delete account 2 in the profile if it + // exists. + int acctCount = 0; + SizedSPropTagArray( 10, acctProps); + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ID_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_TYPE_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_NAME_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_DEFAULT_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_AB_ENABLE_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ENABLE_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_USERNAME_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PASSWORD_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_URI_2; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_2; + acctProps.cValues = acctCount; + + result + = lpServiceProfileObj->DeleteProps( + (LPSPropTagArray)&acctProps, NULL ); + + // FIXME: We need to delete the calendar folder + // for this account. Also + // 'UnRegisterAppointmentFolder' in MSP + // message store. + } + // Account 3 if( conf->accounts.size() > 2 ) { @@ -1076,7 +1111,30 @@ = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_3; tempProps[ulProps++].Value.lpszA = memObj._strdup(strBuff); } + else + { + // Delete account 3 in the profile if it + // exists. + int acctCount = 0; + SizedSPropTagArray( 10, acctProps); + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ID_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_TYPE_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_NAME_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_DEFAULT_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_AB_ENABLE_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ENABLE_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_USERNAME_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PASSWORD_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_URI_3; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_3; + acctProps.cValues = acctCount; + + result + = lpServiceProfileObj->DeleteProps( + (LPSPropTagArray)&acctProps, NULL ); + } + // Account 4 if( conf->accounts.size() > 3 ) { @@ -1132,7 +1190,30 @@ = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_4; tempProps[ulProps++].Value.lpszA = memObj._strdup(strBuff); } + else + { + // Delete account 4 in the profile if it + // exists. + int acctCount = 0; + SizedSPropTagArray( 10, acctProps); + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ID_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_TYPE_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_NAME_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_DEFAULT_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_AB_ENABLE_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_ENABLE_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_USERNAME_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PASSWORD_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_URI_4; + acctProps.aulPropTag[acctCount++] = PR_OTLKCON_ACCOUNT_PRINCIPLE_URI_4; + acctProps.cValues = acctCount; + + result + = lpServiceProfileObj->DeleteProps( + (LPSPropTagArray)&acctProps, NULL ); + } + result = lpServiceProfileObj->SetProps(ulProps, tempProps, NULL); result = lpServiceProfileObj->SaveChanges(0); ulProps = 0; @@ -1430,7 +1511,7 @@ ULONG *lpulProviderVer, LPMSPROVIDER *lppMSProvider) { - debugObj.Initialize(lpAllocateBuffer, lpFreeBuffer); + //debugObj.Initialize(lpAllocateBuffer, lpFreeBuffer); HRESULT result = S_OK; O_IMSProvider *msp; Modified: trunk/otlkcon0/otlkcon_gui.cpp =================================================================== --- trunk/otlkcon0/otlkcon_gui.cpp 2006-11-05 14:55:09 UTC (rev 498) +++ trunk/otlkcon0/otlkcon_gui.cpp 2006-11-06 02:00:11 UTC (rev 499) @@ -296,7 +296,17 @@ case PSN_APPLY: conf = (otlkcon_config *)GetWindowLong(hwnd, GWL_USERDATA); tmpFilename = (wchar_t *)calloc(1, (MAX_PATH+1)*sizeof(wchar_t)); + if( tmpFilename == NULL ) + { + // We didn't get the memory + OTLKCON_DEBUGBREAK; + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, + OTLKCON_LOG_TARGET_ALL, + L"otlkcon_sheet1DlgProc(): calloc() failed" ); + return FALSE; + } + // PR_PST_PATH if( GetDlgItemTextW(hwnd, IDC_DATAFILE_EDIT, tmpFilename, MAX_PATH) == 0 ) @@ -694,7 +704,8 @@ return TRUE; case CBN_KILLFOCUS: - currAccId = (wchar_t *)conf->memObj->pMalloc( OTLKCON_ACCOUNT_STRING_MAX+1 ); + currAccId = (wchar_t *)conf->memObj->pMalloc( + (OTLKCON_ACCOUNT_STRING_MAX+1) * sizeof(wchar_t) ); SendDlgItemMessageW(hwnd, IDC_ACCOUNT_COMBO, WM_GETTEXT, OTLKCON_ACCOUNT_STRING_MAX, (LPARAM)currAccId); Modified: trunk/otlkcon0/protocols/caldav/caldav.cpp =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-11-05 14:55:09 UTC (rev 498) +++ trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-11-06 02:00:11 UTC (rev 499) @@ -174,6 +174,7 @@ variant_t(p.c_str()) ); result = pXMLHttpReq->setRequestHeader( L"Content-Type", L"text/xml" ); + // result = pXMLHttpReq->setRequestHeader( L"Depth", L"1" ); result = pXMLHttpReq->send( variant_t("<?xml version='1.0'?>\ <D:propfind xmlns:D=\"DAV:\"><D:allprop/></D:propfind>") ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-05 14:55:16
|
Revision: 498 http://svn.sourceforge.net/otlkcon/?rev=498&view=rev Author: kervin Date: 2006-11-05 06:55:09 -0800 (Sun, 05 Nov 2006) Log Message: ----------- Bedework PUT and REPORT work. Had XML namespace handling was not working properly. Modified Paths: -------------- trunk/otlkcon0/protocols/caldav/caldav.cpp trunk/otlkcon0/protocols/caldav/caldav.h Modified: trunk/otlkcon0/protocols/caldav/caldav.cpp =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-11-04 02:16:49 UTC (rev 497) +++ trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-11-05 14:55:09 UTC (rev 498) @@ -202,27 +202,64 @@ } resText = (LPCWSTR)NULL; result = pXMLHttpReq->get_responseText( &resText ); +// +// resText = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\ +//<multistatus xmlns=\"DAV:\" xmlns:p=\"urn:ietf:params:xml:ns:caldav\">\ +// <response>\ +// <href>http://127.0.0.1:8080/ucaldav/user/caluser1/calendar/</href>\ +// <propstat>\ +// <prop>\ +// <displayname>calendar</displayname>\ +// <getlastmodified>20061105T023830Z</getlastmodified>\ +// <resourcetype>\ +// <collection/>\ +// <p:calendar/>\ +// </resourcetype>\ +// <getetag>\"20061105T023830Z-0\"</getetag>\ +// <p:max-resource-size>100000</p:max-resource-size>\ +// </prop>\ +// <status>HTTP/1.1 200 ok</status>\ +// </propstat>\ +// </response>\ +//</multistatus>"; + OutputDebugStringW( (LPCWSTR)resText ); - MSXML2::IXMLDOMDocumentPtr responseXML; + // FIXME: NamespaceManager stuff doesn't seem to work + + //unsigned short *pre1, *pre2; + + //MSXML2::IMXNamespaceManagerPtr nsmgr; + //result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); + + //pre1 = (unsigned short *)_wcsdup( L"D" ); + //pre2 = (unsigned short *)_wcsdup( L"DAV:" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + + //pre1 = (unsigned short *)_wcsdup( L"C" ); + //pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + + MSXML2::IXMLDOMDocument2Ptr responseXML; + + // For test alternate XML + + // result = responseXML.CreateInstance( __uuidof(MSXML2::DOMDocument) ); + // VARIANT_BOOL boolSuc; + // responseXML->loadXML( resText, &boolSuc ); + result = pXMLHttpReq->get_responseXML( (IDispatch**)&responseXML ); - unsigned short *pre1, *pre2; + // FIXME: MSXML ignores default namespaces in XPath. - MSXML2::IMXNamespaceManagerPtr nsmgr; - result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); + result = responseXML->setProperty( bstr_t("SelectionNamespaces"), + variant_t("xmlns:D='DAV:' xmlns:C='urn:ietf:params:xml:ns:caldav'") ); - pre1 = (unsigned short *)_wcsdup( L"D" ); - pre2 = (unsigned short *)_wcsdup( L"DAV:" ); - result = nsmgr->declarePrefix( pre1, pre2 ); - pre1 = (unsigned short *)_wcsdup( L"C" ); - pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); - result = nsmgr->declarePrefix( pre1, pre2 ); - MSXML2::IXMLDOMNodePtr node, node2; // We need to find an ok status and calendar present here result = responseXML->selectSingleNode( - L"/D:multistatus/D:response/D:propstat/D:prop/D:resourcetype/C:calendar", &node ); + L"/D:multistatus/D:response/D:propstat/D:prop/D:resourcetype/C:calendar", &node ); + if( node ) { result = node->selectSingleNode( L"../../../D:status", &node2); @@ -408,7 +445,7 @@ return res; } -HRESULT CaldavConnection::ReportResponseXML2Components( MSXML2::IXMLDOMDocumentPtr response, +HRESULT CaldavConnection::ReportResponseXML2Components( MSXML2::IXMLDOMDocument2Ptr response, otlkcon_calendar_component_array **comps) { HRESULT result = S_OK; @@ -417,19 +454,23 @@ vector<otlkcon_calendar_component*> compsList; wstring tempName; ULONG dataSize = 0; - unsigned short *pre1, *pre2; + //unsigned short *pre1, *pre2; errno_t resErr; - MSXML2::IMXNamespaceManagerPtr nsmgr; - result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); + // FIXME: Doesn't work + //MSXML2::IMXNamespaceManagerPtr nsmgr; + //result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); - pre1 = (unsigned short *)_wcsdup( L"D" ); - pre2 = (unsigned short *)_wcsdup( L"DAV:" ); - result = nsmgr->declarePrefix( pre1, pre2 ); - pre1 = (unsigned short *)_wcsdup( L"C" ); - pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); - result = nsmgr->declarePrefix( pre1, pre2 ); + //pre1 = (unsigned short *)_wcsdup( L"D" ); + //pre2 = (unsigned short *)_wcsdup( L"DAV:" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + //pre1 = (unsigned short *)_wcsdup( L"C" ); + //pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + result = response->setProperty( bstr_t("SelectionNamespaces"), + variant_t("xmlns:D='DAV:' xmlns:C='urn:ietf:params:xml:ns:caldav'") ); + MSXML2::IXMLDOMNodePtr node, node2, node3; MSXML2::IXMLDOMNodeListPtr nodeList = NULL; @@ -609,7 +650,7 @@ char reqstr[1023] = {0}; int iAttempts = 2; wstring reqStr; - unsigned short *pre1, *pre2; + // unsigned short *pre1, *pre2; while(iAttempts--) { @@ -698,18 +739,23 @@ result = pXMLHttpReq->get_responseText( &resText ); OutputDebugStringW( (LPCWSTR)resText ); - MSXML2::IXMLDOMDocumentPtr responseXML; + MSXML2::IXMLDOMDocument2Ptr responseXML; result = pXMLHttpReq->get_responseXML( (IDispatch**)&responseXML ); - MSXML2::IMXNamespaceManagerPtr nsmgr; - result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); - pre1 = (unsigned short *)_wcsdup( L"D" ); - pre2 = (unsigned short *)_wcsdup( L"DAV:" ); - result = nsmgr->declarePrefix( pre1, pre2 ); - pre1 = (unsigned short *)_wcsdup( L"C" ); - pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); - result = nsmgr->declarePrefix( pre1, pre2 ); + // FIXME: This doesn't work + //MSXML2::IMXNamespaceManagerPtr nsmgr; + //result = nsmgr.CreateInstance( __uuidof(MSXML2::MXNamespaceManager40) ); + //pre1 = (unsigned short *)_wcsdup( L"D" ); + //pre2 = (unsigned short *)_wcsdup( L"DAV:" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + //pre1 = (unsigned short *)_wcsdup( L"C" ); + //pre2 = (unsigned short *)_wcsdup( L"urn:ietf:params:xml:ns:caldav" ); + //result = nsmgr->declarePrefix( pre1, pre2 ); + + result = responseXML->setProperty( bstr_t("SelectionNamespaces"), + variant_t("xmlns:D='DAV:' xmlns:C='urn:ietf:params:xml:ns:caldav'") ); + MSXML2::IXMLDOMNodePtr node, node2, node3; MSXML2::IXMLDOMNodeListPtr nodeList = NULL; @@ -849,7 +895,7 @@ result = pXMLHttpReq->get_responseText( &resText ); OutputDebugStringW( (LPCWSTR)resText ); - MSXML2::IXMLDOMDocumentPtr responseXML; + MSXML2::IXMLDOMDocument2Ptr responseXML; result = pXMLHttpReq->get_responseXML( (IDispatch**)&responseXML ); result = ReportResponseXML2Components( responseXML, comps); @@ -1002,7 +1048,7 @@ result = pXMLHttpReq->get_responseText( &resText ); OutputDebugStringW( resText ); - MSXML2::IXMLDOMDocumentPtr responseXML; + MSXML2::IXMLDOMDocument2Ptr responseXML; result = pXMLHttpReq->get_responseXML( (IDispatch**)&responseXML ); result = ReportResponseXML2Components( responseXML, comps ); Modified: trunk/otlkcon0/protocols/caldav/caldav.h =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.h 2006-11-04 02:16:49 UTC (rev 497) +++ trunk/otlkcon0/protocols/caldav/caldav.h 2006-11-05 14:55:09 UTC (rev 498) @@ -62,7 +62,7 @@ wchar_t** lpszCalEtag, ULONG *ulCalETag, ULONG ulFlags); wstring ResourcenameFromUrl( wstring url ); int StatusString2Int( wstring stat ); - HRESULT ReportResponseXML2Components( MSXML2::IXMLDOMDocumentPtr response, + HRESULT ReportResponseXML2Components( MSXML2::IXMLDOMDocument2Ptr response, otlkcon_calendar_component_array **comps); HRESULT GetEventsByName( list<wstring> names, otlkcon_calendar_component_array **comps); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-11-04 02:16:59
|
Revision: 497 http://svn.sourceforge.net/otlkcon/?rev=497&view=rev Author: kervin Date: 2006-11-03 18:16:49 -0800 (Fri, 03 Nov 2006) Log Message: ----------- Small configuration changes. Modified Paths: -------------- trunk/otlkcon0/mstore/mstore.vcproj trunk/otlkcon0/otlkcon_config.h trunk/otlkcon0/protocols/file/file.vcproj trunk/otlkcon0/protocols/ical/libical/libical.vcproj trunk/otlkcon0/smlog/smlog.vcproj Modified: trunk/otlkcon0/mstore/mstore.vcproj =================================================================== --- trunk/otlkcon0/mstore/mstore.vcproj 2006-10-26 02:05:15 UTC (rev 496) +++ trunk/otlkcon0/mstore/mstore.vcproj 2006-11-04 02:16:49 UTC (rev 497) @@ -228,7 +228,7 @@ DebugInformationFormat="3" CallingConvention="0" ShowIncludes="false" - EnablePREfast="false" + EnablePREfast="true" /> <Tool Name="VCManagedResourceCompilerTool" Modified: trunk/otlkcon0/otlkcon_config.h =================================================================== --- trunk/otlkcon0/otlkcon_config.h 2006-10-26 02:05:15 UTC (rev 496) +++ trunk/otlkcon0/otlkcon_config.h 2006-11-04 02:16:49 UTC (rev 497) @@ -52,7 +52,7 @@ #define OTLKCON_SQLITE_TRACE 1 // Should we use an in-memory database? - #define OTLKCON_USE_MEM_DB 1 + //#define OTLKCON_USE_MEM_DB 1 #define OTLKCON_DEBUG_MEM_DB 1 #define OTLKCON_DEBUG_MEM_DB_FILENAME "C:\\otlkcon_memdb.ocdb" #endif Modified: trunk/otlkcon0/protocols/file/file.vcproj =================================================================== --- trunk/otlkcon0/protocols/file/file.vcproj 2006-10-26 02:05:15 UTC (rev 496) +++ trunk/otlkcon0/protocols/file/file.vcproj 2006-11-04 02:16:49 UTC (rev 497) @@ -180,6 +180,7 @@ WarningLevel="3" Detect64BitPortabilityProblems="true" DebugInformationFormat="3" + EnablePREfast="true" /> <Tool Name="VCManagedResourceCompilerTool" Modified: trunk/otlkcon0/protocols/ical/libical/libical.vcproj =================================================================== --- trunk/otlkcon0/protocols/ical/libical/libical.vcproj 2006-10-26 02:05:15 UTC (rev 496) +++ trunk/otlkcon0/protocols/ical/libical/libical.vcproj 2006-11-04 02:16:49 UTC (rev 497) @@ -182,6 +182,7 @@ DebugInformationFormat="3" CallingConvention="0" CompileAs="2" + EnablePREfast="true" /> <Tool Name="VCManagedResourceCompilerTool" Modified: trunk/otlkcon0/smlog/smlog.vcproj =================================================================== --- trunk/otlkcon0/smlog/smlog.vcproj 2006-10-26 02:05:15 UTC (rev 496) +++ trunk/otlkcon0/smlog/smlog.vcproj 2006-11-04 02:16:49 UTC (rev 497) @@ -213,6 +213,7 @@ Detect64BitPortabilityProblems="true" DebugInformationFormat="3" CompileAs="1" + EnablePREfast="true" /> <Tool Name="VCManagedResourceCompilerTool" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-26 02:05:27
|
Revision: 496 http://svn.sourceforge.net/otlkcon/?rev=496&view=rev Author: kervin Date: 2006-10-25 19:05:15 -0700 (Wed, 25 Oct 2006) Log Message: ----------- New installer works ( barely ), old installer project removed. ochelper.exe has a new logging feature that logs output to a specified file. Modified Paths: -------------- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj trunk/otlkcon0/ochelper/ochelper.cpp trunk/otlkcon0/ochelper/ochelper.h trunk/otlkcon0/ochelper/ochelper.vcproj trunk/otlkcon0/otlkcon.sln trunk/otlkcon0/otlkcon_config.h Added Paths: ----------- trunk/otlkcon0/ochelper/logfile.cpp Modified: trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj =================================================================== --- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-10-26 02:05:15 UTC (rev 496) @@ -27,6 +27,12 @@ } "Entry" { + "MsmKey" = "8:_1CAC0883E2084AF694E3B7B159F792C2" + "OwnerKey" = "8:_63FB7766980E402EB5A84A2502C27938" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_1FE38AC9B61F44B99A4937F41E9FE6C4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -39,7 +45,7 @@ } "Entry" { - "MsmKey" = "8:_40B250BEF4E03C8ACFE036AD60117685" + "MsmKey" = "8:_2F59F8429F60F50EA7AC342A9C22C02E" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } @@ -51,14 +57,20 @@ } "Entry" { - "MsmKey" = "8:_4E4FD2A441BD2C786F74F2D4E80C5B16" + "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_63FB7766980E402EB5A84A2502C27938" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_63FB7766980E402EB5A84A2502C27938" + "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -69,24 +81,18 @@ } "Entry" { - "MsmKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" + "MsmKey" = "8:_7FBBE09D4497A73000FDCAA2DC53CFC8" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" - "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "MsmKey" = "8:_A599F92A2DBAA4BEB634C767F932E110" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_BA99BFF9201A4432871F5C6E5BAB76FC" - "OwnerKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_BD5C8753C1A84F03A344495A57702560" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -136,6 +142,11 @@ "ComponentsUrl" = "8:" "Items" { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } } } } @@ -163,6 +174,11 @@ "ComponentsUrl" = "8:" "Items" { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } } } } @@ -171,17 +187,17 @@ { "CustomAction" { - "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_C46234A05EB5494CA49B3766BBC57682" + "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_DB8167D19B0C48BDB2B0E89ADE3EBA7A" { "Name" = "8:Primary Output from ochelper (Active)" "Condition" = "8:" "Object" = "8:_C4DD9B5261AE4652865102BEE45DB230" "FileType" = "3:2" "InstallAction" = "3:1" - "Arguments" = "8:--merge-mapisvcinf .\\otlkcon.ini --find mapisvcinf" + "Arguments" = "8:--logfile \"c:\\temp\\ochelper.txt\" --merge-mapisvcinf \"[TARGETDIR]otlkcon.ini\" --find mapisvcinf " "EntryPoint" = "8:" "Sequence" = "3:1" - "Identifier" = "8:_868D0523_FAA0_469E_A407_A0A9B0039AD2" + "Identifier" = "8:_C4A00FBE_4484_49B7_9B5C_26CEC8EB7CEC" "InstallerClass" = "11:FALSE" "CustomActionData" = "8:" } @@ -240,10 +256,10 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_40B250BEF4E03C8ACFE036AD60117685" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2F59F8429F60F50EA7AC342A9C22C02E" { - "SourcePath" = "8:smlog.dll" - "TargetName" = "8:smlog.dll" + "SourcePath" = "8:msxml4.dll" + "TargetName" = "8:msxml4.dll" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" @@ -255,8 +271,8 @@ "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" + "Register" = "3:4" + "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } @@ -280,11 +296,31 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4E4FD2A441BD2C786F74F2D4E80C5B16" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_79BC0ED1F6E3432BA157C4491C3F0751" { - "SourcePath" = "8:sqlite32.dll" - "TargetName" = "8:sqlite32.dll" + "SourcePath" = "8:..\\Installer\\License.rtf" + "TargetName" = "8:License.rtf" "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FBBE09D4497A73000FDCAA2DC53CFC8" + { + "SourcePath" = "8:ocsqlt32.dll" + "TargetName" = "8:ocsqlt32.dll" + "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" "Transitive" = "11:FALSE" @@ -300,12 +336,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_79BC0ED1F6E3432BA157C4491C3F0751" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A599F92A2DBAA4BEB634C767F932E110" { - "SourcePath" = "8:..\\Installer\\License.rtf" - "TargetName" = "8:License.rtf" + "SourcePath" = "8:smlog.dll" + "TargetName" = "8:smlog.dll" "Tag" = "8:" - "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -317,7 +353,7 @@ "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" + "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" @@ -470,7 +506,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Open Connector Groupware" "ProductCode" = "8:{81D70F95-062C-4D0D-B5C6-7A96CB23D452}" - "PackageCode" = "8:{A43F5046-8855-40D7-A2AF-0DE7D72B2823}" + "PackageCode" = "8:{3DF92327-E4D1-4791-876A-1FD74F79A0B8}" "UpgradeCode" = "8:{81AFB6EC-732F-431F-9161-81F0431B1388}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" @@ -544,20 +580,6 @@ "Transitive" = "11:FALSE" "Keys" { - "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A1F9602EEAB74360BEF5D195798C19D7" - { - "Name" = "8:[Manufacturer]" - "Condition" = "8:" - "AlwaysCreate" = "11:FALSE" - "DeleteAtUninstall" = "11:FALSE" - "Transitive" = "11:FALSE" - "Keys" - { - } - "Values" - { - } - } } "Values" { @@ -1105,44 +1127,44 @@ "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5AB29EDD9D774065AF72BC4A5616566D" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_1CAC0883E2084AF694E3B7B159F792C2" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:..\\Installer\\msxml4sys32.msm" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm" "Properties" { } - "LanguageId" = "3:1033" + "LanguageId" = "3:0" "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_8E0150B70A9449B9BC2AFE2CF38250C0" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5AB29EDD9D774065AF72BC4A5616566D" { "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:TRUE" - "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:..\\Installer\\msxml4sys32.msm" "Properties" { } - "LanguageId" = "3:0" - "Exclude" = "11:TRUE" + "LanguageId" = "3:1033" + "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_BA99BFF9201A4432871F5C6E5BAB76FC" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_63FB7766980E402EB5A84A2502C27938" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" - "SourcePath" = "8:policy_8_0_microsoft_vc80_debugcrt_x86.msm" + "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm" "Properties" { } "LanguageId" = "3:0" - "Exclude" = "11:TRUE" + "Exclude" = "11:FALSE" "Folder" = "8:" "Feature" = "8:" "IsolateTo" = "8:" @@ -1152,7 +1174,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2064FE922890443BA320E51602079B00" { - "SourcePath" = "8:..\\Debug_Installed\\mstore32.dll" + "SourcePath" = "8:..\\Release\\mstore32.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_A19D7AAD530C4F5F969E64EF3ED06ADE" @@ -1180,7 +1202,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C4DD9B5261AE4652865102BEE45DB230" { - "SourcePath" = "8:..\\Debug_Installed\\ochelper.exe" + "SourcePath" = "8:..\\Release\\ochelper.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" Added: trunk/otlkcon0/ochelper/logfile.cpp =================================================================== --- trunk/otlkcon0/ochelper/logfile.cpp (rev 0) +++ trunk/otlkcon0/ochelper/logfile.cpp 2006-10-26 02:05:15 UTC (rev 496) @@ -0,0 +1,126 @@ +/***************************************************************************** +Copyright 2006 Kervin L. Pierre + EMAIL: ot...@ad... + +This file is part of Otlkcon. + +Otlkcon is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +Otlkcon 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 +Lesser GNU General Public License for more details. + +You should have received a copy of the Lesser GNU General Public License +along with Otlkcon; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +#include "stdafx.h" +#include "ochelper.h" + +extern int otlkcon_debugLevel; +extern int otlkcon_logToFileEnabled; +extern wchar_t otlkcon_logFile[MAX_PATH+1]; + +int LOG_PRINTF(int level, int flag, wchar_t *format, ...) +{ + + // Honour debug level... + if( !(otlkcon_debugLevel & level) ) + return 0; + + int result = S_OK; + + FILE *stream; + va_list argList; + + size_t pos; + wchar_t logTime[10] = {0}; + wchar_t msg[OTLKCON_LOG_MSG_MAX_LEN] = {0}; + + if( flag == OTLKCON_LOG_TARGET_NONE ) + return 0; + + /* Format message, plus time into message buffer */ + if( flag & OTLKCON_LOG_FLAG_NO_DATE ) + { + pos = 0; + } + else + { + _wstrtime_s(logTime); + pos = wcslen(logTime) + 10; + swprintf_s(msg, OTLKCON_LOG_MSG_MAX_LEN, + L"0x%0.4x [%s] ", GetCurrentThreadId(), logTime); + } + + va_start(argList, format); + result = _vsnwprintf_s( &msg[pos], OTLKCON_LOG_MSG_MAX_LEN-(pos+1), + OTLKCON_LOG_MSG_MAX_LEN-(pos+2), format, argList); + va_end(argList); + + + if( otlkcon_logToFileEnabled == 1 + && ( flag & OTLKCON_LOG_TARGET_FILE + || flag & OTLKCON_LOG_TARGET_ALL ) ) + { + /* TODO: logfile I/O should be protected by a mutex */ + errno_t errRes = 0; + if( wcslen(otlkcon_logFile) == 0 ) + errRes = _wfopen_s( &stream, OTLKCON_LOG_DEFAULT_FILE, L"a+"); + else errRes = _wfopen_s( &stream, otlkcon_logFile, L"a+"); + + if( errRes == 0 ) + { + /* file is unbuffered */ + setvbuf(stream, NULL, _IONBF, 0); + + fwprintf_s(stream, L"%s", msg); + fclose(stream); + } + } + + wprintf_s( L"%s", msg); + +#ifdef OTLKCON_LOG_MSVC_DEBUGGER_ENABLED + if( otlkcon_logToMSVCEnabled == 1 + && ( flag & OTLKCON_LOG_TARGET_MSVC + || flag & OTLKCON_LOG_TARGET_ALL ) ) + { + OutputDebugStringW(msg); + } +#endif /* OTLKCON_LOG_MSVC_DEBUGGER_ENABLED */ +/* +#ifdef OTLKCON_LOG_SM_SUPPORT_ENABLED + if( otlkcon_logToSMEnabled == 1 ) + { + if( flag & OTLKCON_LOG_TARGET_SM ) + { + smlog_write(otlkcon_processSMServerContext, msg); + } + else if( flag & OTLKCON_LOG_TARGET_ALL ) + { + #ifdef OTLKCON_LOG_IMPLICIT_PRINTF_TO_SM + smlog_write(otlkcon_processSMServerContext, msg); + #endif // OTLKCON_LOG_IMPLICIT_PRINTF_TO_SM + } + } +#endif // OTLKCON_LOG_SM_SUPPORT_ENABLED +*/ + /* Warn about truncation */ + if( (wcslen(msg) >= OTLKCON_LOG_MSG_MAX_LEN-1) + && (_scwprintf(L"WARNING: The above message may have been truncated\r\n%d == LOG_MSG_MAX, %d.", + wcslen(msg), OTLKCON_LOG_MSG_MAX_LEN) < OTLKCON_LOG_MSG_MAX_LEN-1) ) + { + LOG_PRINTF(OTLKCON_LOG_LEVEL_WARNING, NULL, + L"WARNING: The above message may have been truncated\r\n%d == LOG_MSG_MAX, %d.", + wcslen(msg), OTLKCON_LOG_MSG_MAX_LEN); + } + + return result; +} \ No newline at end of file Modified: trunk/otlkcon0/ochelper/ochelper.cpp =================================================================== --- trunk/otlkcon0/ochelper/ochelper.cpp 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/ochelper/ochelper.cpp 2006-10-26 02:05:15 UTC (rev 496) @@ -29,6 +29,11 @@ using namespace std; +int otlkcon_debugLevel + = OTLKCON_DEFAULT_DEBUGLEVEL; +int otlkcon_logToFileEnabled = 0; +wchar_t otlkcon_logFile[MAX_PATH+1] = {0}; + /* HRESULT caldav_test() @@ -154,16 +159,19 @@ LPWSTR *args = CommandLineToArgvW( GetCommandLineW(), &result); - int find_flag = 0; - int mapisvcinf_flag = 0; - int show_library_flag = 0; - int merge_mapisvcinf_flag = 0; + int find_flag = 0; + int mapisvcinf_flag = 0; + int show_library_flag = 0; + int merge_mapisvcinf_flag = 0; + int logfile_flag = 0; + int help_flag = 0; - wstring find_flag_arg = L""; - wstring mapisvcinf_flag_arg = L""; - wstring merge_mapisvcinf_flag_arg = L""; - wstring show_library_flag_arg = L""; - wstring *prev_flag = NULL; + wstring find_flag_arg = L""; + wstring mapisvcinf_flag_arg = L""; + wstring merge_mapisvcinf_flag_arg = L""; + wstring show_library_flag_arg = L""; + wstring logfile_flag_arg = L""; + wstring *prev_flag = NULL; for(int i=1; i<result; i++) { @@ -177,6 +185,11 @@ mapisvcinf_flag = 1; prev_flag = &mapisvcinf_flag_arg; } + else if( wcscmp(args[i], L"--logfile") == 0 ) + { + logfile_flag = 1; + prev_flag = &logfile_flag_arg; + } else if( wcscmp(args[i], L"--merge-mapisvcinf") == 0 ) { merge_mapisvcinf_flag = 1; @@ -189,7 +202,7 @@ } else if( wcscmp(args[i], L"--help") == 0 ) { - print_options(0, wstring(L"") ); + help_flag = 1; } else { @@ -202,8 +215,25 @@ } } + // Do actions. + // result = caldav_test(); + + // Setup the log file first if needed + if( logfile_flag == 1 ) + { + // log to a file + wcscpy_s(otlkcon_logFile,MAX_PATH+1, + logfile_flag_arg.c_str()); + otlkcon_logToFileEnabled = 1; + } + + if(help_flag == 1 ) + { + print_options(0, wstring(L"") ); + } + wstring found_mapisvcinf_file = L""; if( find_flag == 1 ) { @@ -217,7 +247,7 @@ { if( find_mapisvc(&found_mapisvcinf_file) == S_OK ) { - wprintf( L"SUCCESS: %s\n", found_mapisvcinf_file.c_str()); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"SUCCESS: %s\n", found_mapisvcinf_file.c_str()); mapisvcinf_flag_arg = found_mapisvcinf_file; } else @@ -234,7 +264,7 @@ result = otlkcon_loadlibrary( L"" ); if( result != S_OK ) { - wprintf( L"ERROR: Could not load the 'mstore32.dll' library\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"ERROR: Could not load the 'mstore32.dll' library\n" ); } } @@ -271,12 +301,12 @@ void print_options(int retVal, wstring str) { - wprintf( L"ochelper - Do stuff for otlkcon\n" ); - wprintf( L"%s\n\n", str.c_str() ); - wprintf( L"ochelper.exe [--find mapisvcinf] [--mapisvcinf filename] [--merge-mapisvcinf filename]\n\n" ); - wprintf( L"--find - Find a configuration file. Currently only mapisvc.inf is supported.\n" ); - wprintf( L"--mapisvcinf - Specify the full mapisvc.inf for an operation\n" ); - wprintf( L"--merge-mapisvcinf - Merge an INI file with MapiSvc.inf\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"ochelper - Do stuff for otlkcon\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"%s\n\n", str.c_str() ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"ochelper.exe [--find mapisvcinf] [--mapisvcinf filename] [--merge-mapisvcinf filename]\n\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"--find - Find a configuration file. Currently only mapisvc.inf is supported.\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"--mapisvcinf - Specify the full mapisvc.inf for an operation\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL|OTLKCON_LOG_FLAG_NO_DATE, L"--merge-mapisvcinf - Merge an INI file with MapiSvc.inf\n" ); exit(retVal); } @@ -299,7 +329,7 @@ if( RegOpenKeyExW(HKEY_LOCAL_MACHINE, OUTLOOK_KEY, 0, KEY_QUERY_VALUE, &hk) != ERROR_SUCCESS ) { - wprintf( L"Error: Could not open '%s' registry key\n" , OUTLOOK_KEY); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"Error: Could not open '%s' registry key\n" , OUTLOOK_KEY); return E_FAIL; } szBufSize = OUTLOOK_REGKEY_MAX_LEN; @@ -307,7 +337,7 @@ (LPBYTE)&compID, &szBufSize); if( result != ERROR_SUCCESS ) { - wprintf( L"Error: Could not retrieve CompID from registy\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"Error: Could not retrieve CompID from registy\n" ); return E_FAIL; } szBufSize = OUTLOOK_REGKEY_MAX_LEN; @@ -315,7 +345,7 @@ (LPBYTE)&appID, &szBufSize); if( result != ERROR_SUCCESS ) { - wprintf( L"Error: Could not retrieve AppID from registy\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"Error: Could not retrieve AppID from registy\n" ); return E_FAIL; } RegCloseKey(hk); @@ -364,7 +394,7 @@ wchar_t wbuf[MAX_PATH] = {0}; if( (result = GetSystemDirectoryW((LPWSTR)&wbuf, MAX_PATH)) == 0 ) { - wprintf( L"Error: Could not retrieve system folder\n" ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"Error: Could not retrieve system folder\n" ); return E_FAIL; } file->append( wbuf ); @@ -391,20 +421,23 @@ // One 2MB szBuffSize = 1024 * 1024; + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L" Merging '%s' with '%s'", inifile.c_str(), mapisvcinf.c_str() ); + if ((CopyFileW(mapisvcinf.c_str(),mapisvcinf_bak.c_str(),false))==false) { //TODO: We should return specific error codes so the gui can relay // The problem to the user. //copy attempt failed - wprintf( L"ochelper mergeini aborted- mapisvcinf file backup failed " ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"ochelper mergeini aborted- mapisvcinf file backup failed " ); return E_FAIL; } if( PathFileExistsW( inifile.c_str() ) == FALSE ) { - wprintf( L"ochelper mergeini aborted- '%s' not found ", inifile.c_str() ); + LOG_PRINTF( OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"ochelper mergeini aborted- '%s' not found ", inifile.c_str() ); return E_FAIL; } Modified: trunk/otlkcon0/ochelper/ochelper.h =================================================================== --- trunk/otlkcon0/ochelper/ochelper.h 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/ochelper/ochelper.h 2006-10-26 02:05:15 UTC (rev 496) @@ -29,6 +29,9 @@ #include "resource.h" +#define OTLKCON_REG_KEY L"Software\\Open Connector Groupware" +#define OTLKCON_REG_KEY_A "Software\\Open Connector Groupware" + #define OUTLOOK_KEY L"SOFTWARE\\Clients\\Mail\\Microsoft Outlook" #define OUTLOOK_COMP_ID L"MSIComponentID" #define OUTLOOK_APP_ID L"MSIApplicationLCID" @@ -38,6 +41,27 @@ #define OCHELPER_DEFAULT_DLL_NAME L"mstore32.dll" +#define OTLKCON_LOG_DEFAULT_FILE L"C:\\ochelper.txt" +#define OTLKCON_LOG_MSG_MAX_LEN 65536 +#define OTLKCON_LOG_SM_SUPPORT_ENABLED 0 +#define OTLKCON_LOG_LEVEL_ALL -1 +#define OTLKCON_LOG_LEVEL_ERROR 1 +#define OTLKCON_LOG_LEVEL_WARNING 2 +#define OTLKCON_LOG_LEVEL_INFO 4 +#define OTLKCON_LOG_LEVEL_SPECIAL_1 8 +#define OTLKCON_LOG_LEVEL_SPECIAL_2 16 +#define OTLKCON_LOG_LEVEL_SPECIAL_3 32 +#define OTLKCON_LOG_LEVEL_DEFAULT (OTLKCON_LOG_LEVEL_INFO|OTLKCON_LOG_LEVEL_WARNING|OTLKCON_LOG_LEVEL_ERROR) +/* First 16 bits of flag */ +#define OTLKCON_LOG_TARGET_NONE 0 +#define OTLKCON_LOG_TARGET_ALL 1 +#define OTLKCON_LOG_TARGET_MSVC 2 +#define OTLKCON_LOG_TARGET_SM 4 +#define OTLKCON_LOG_TARGET_FILE 8 +/* Second 16 bits of flag */ +#define OTLKCON_LOG_FLAG_NO_DATE 131072 +#define OTLKCON_DEFAULT_DEBUGLEVEL -1 + typedef BOOL (STDAPICALLTYPE FGETCOMPONENTPATH) (LPSTR szComponent, LPSTR szQualifier, @@ -53,4 +77,5 @@ wstring mapisvcinf_bak); void print_options(int retVal, wstring str); +int LOG_PRINTF(int level, int flag, wchar_t *format, ...); Modified: trunk/otlkcon0/ochelper/ochelper.vcproj =================================================================== --- trunk/otlkcon0/ochelper/ochelper.vcproj 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/ochelper/ochelper.vcproj 2006-10-26 02:05:15 UTC (rev 496) @@ -275,6 +275,10 @@ > </File> <File + RelativePath=".\logfile.cpp" + > + </File> + <File RelativePath=".\ochelper.cpp" > </File> Modified: trunk/otlkcon0/otlkcon.sln =================================================================== --- trunk/otlkcon0/otlkcon.sln 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/otlkcon.sln 2006-10-26 02:05:15 UTC (rev 496) @@ -5,7 +5,6 @@ {CE1D410F-BDA3-47FE-B451-4D46D5E2355A} = {CE1D410F-BDA3-47FE-B451-4D46D5E2355A} {D3D35132-5BD5-4C1B-8696-1BB5F98382A7} = {D3D35132-5BD5-4C1B-8696-1BB5F98382A7} {3DA01537-444F-4F26-9703-C25F131E650A} = {3DA01537-444F-4F26-9703-C25F131E650A} - {63F41B3A-0368-4A95-8942-026F4B5920BB} = {63F41B3A-0368-4A95-8942-026F4B5920BB} {5EC5538C-DE2C-4C6C-9884-52542DC341CF} = {5EC5538C-DE2C-4C6C-9884-52542DC341CF} {B596428E-3664-44BC-A334-F0A277475C22} = {B596428E-3664-44BC-A334-F0A277475C22} {3091798F-1848-44F3-88C5-3265A5913F6C} = {3091798F-1848-44F3-88C5-3265A5913F6C} @@ -33,16 +32,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libical", "protocols\ical\libical\libical.vcproj", "{B596428E-3664-44BC-A334-F0A277475C22}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Installer", "Installer\Installer.vcproj", "{63F41B3A-0368-4A95-8942-026F4B5920BB}" - ProjectSection(ProjectDependencies) = postProject - {3DA01537-444F-4F26-9703-C25F131E650A} = {3DA01537-444F-4F26-9703-C25F131E650A} - {5EC5538C-DE2C-4C6C-9884-52542DC341CF} = {5EC5538C-DE2C-4C6C-9884-52542DC341CF} - {B596428E-3664-44BC-A334-F0A277475C22} = {B596428E-3664-44BC-A334-F0A277475C22} - {3091798F-1848-44F3-88C5-3265A5913F6C} = {3091798F-1848-44F3-88C5-3265A5913F6C} - {CA0A6BA6-BC66-40BA-998E-518A4F52A848} = {CA0A6BA6-BC66-40BA-998E-518A4F52A848} - {A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5} = {A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file", "protocols\file\file.vcproj", "{A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5}" ProjectSection(ProjectDependencies) = postProject {B596428E-3664-44BC-A334-F0A277475C22} = {B596428E-3664-44BC-A334-F0A277475C22} @@ -106,12 +95,6 @@ {B596428E-3664-44BC-A334-F0A277475C22}.Debug|Win32.Build.0 = Debug|Win32 {B596428E-3664-44BC-A334-F0A277475C22}.Release|Win32.ActiveCfg = Release|Win32 {B596428E-3664-44BC-A334-F0A277475C22}.Release|Win32.Build.0 = Release|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Debug_Installed|Win32.ActiveCfg = Debug_Installed|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Debug_Installed|Win32.Build.0 = Debug_Installed|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Debug|Win32.ActiveCfg = Debug|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Debug|Win32.Build.0 = Debug|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Release|Win32.ActiveCfg = Release|Win32 - {63F41B3A-0368-4A95-8942-026F4B5920BB}.Release|Win32.Build.0 = Release|Win32 {A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5}.Debug_Installed|Win32.ActiveCfg = Debug_Installed|Win32 {A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5}.Debug_Installed|Win32.Build.0 = Debug_Installed|Win32 {A1AB77E1-E23C-4C5D-991A-96CFE5FC42C5}.Debug|Win32.ActiveCfg = Debug|Win32 Modified: trunk/otlkcon0/otlkcon_config.h =================================================================== --- trunk/otlkcon0/otlkcon_config.h 2006-10-25 08:56:47 UTC (rev 495) +++ trunk/otlkcon0/otlkcon_config.h 2006-10-26 02:05:15 UTC (rev 496) @@ -50,13 +50,13 @@ #undef OTLKCON_SQLITE_TRACE #define OTLKCON_SQLITE_TRACE 1 + + // Should we use an in-memory database? + #define OTLKCON_USE_MEM_DB 1 + #define OTLKCON_DEBUG_MEM_DB 1 + #define OTLKCON_DEBUG_MEM_DB_FILENAME "C:\\otlkcon_memdb.ocdb" #endif -// Should we use an in-memory database -#define OTLKCON_USE_MEM_DB 1 -#define OTLKCON_DEBUG_MEM_DB 1 -#define OTLKCON_DEBUG_MEM_DB_FILENAME "C:\\otlkcon_memdb.ocdb" - #ifdef OTLKCON_LOG #define OTLKCON_LOG_DEFAULT_FILE L"C:\\otlkcon.log" #define OTLKCON_LOG_MSG_MAX_LEN 65536 @@ -85,8 +85,8 @@ #define OTLKCON_DEFAULT_FILE_EXT L"ocdb" -#define OTLKCON_REG_KEY L"Software\\Open Connector - MAPI Message Service" -#define OTLKCON_REG_KEY_A "Software\\Open Connector - MAPI Message Service" +#define OTLKCON_REG_KEY L"Software\\Open Connector Groupware" +#define OTLKCON_REG_KEY_A "Software\\Open Connector Groupware" #define OTLKCON_REG_VALUE_MAX_LEN 255 #define OTLKCON_REG_BACKENDKEY "\\backends" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-25 08:56:56
|
Revision: 495 http://svn.sourceforge.net/otlkcon/?rev=495&view=rev Author: kervin Date: 2006-10-25 01:56:47 -0700 (Wed, 25 Oct 2006) Log Message: ----------- Turned on memory database temporarily. MemDB now stores in a separate file for testing. Modified Paths: -------------- trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj trunk/otlkcon0/mstore/O_IMSProvider.cpp trunk/otlkcon0/mstore/mstore.cpp trunk/otlkcon0/otlkcon_config.h trunk/otlkcon0/otlkcon_sqlite_utils.cpp trunk/otlkcon0/protocols/caldav/caldav.vcproj trunk/otlkcon0/protocols/ical/libical/libical.vcproj Modified: trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj =================================================================== --- trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/AllocProfiler/AllocProfiler.vcproj 2006-10-25 08:56:47 UTC (rev 495) @@ -203,7 +203,7 @@ UsePrecompiledHeader="2" WarningLevel="3" Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" + DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" Modified: trunk/otlkcon0/mstore/O_IMSProvider.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMSProvider.cpp 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/mstore/O_IMSProvider.cpp 2006-10-25 08:56:47 UTC (rev 495) @@ -369,12 +369,6 @@ // conf->dbFilename = memObj->pWcsdup( L"c:\\otlkcon.ocdb" ); // result = conf->showGui(); -#ifdef OTLKCON_DELETE_MSTORE_DB - // For debugging, start with a fresh file - DeleteFile(dbFilename); - Sleep( OTLKCON_DELETE_PAUSE ); -#endif // OTLKCON_DELETE_MSTORE_DB - // TODO: We should only do the following if we are the first instance // of the store. If the store is already open we should addref // on the interface, and return object. Modified: trunk/otlkcon0/mstore/mstore.cpp =================================================================== --- trunk/otlkcon0/mstore/mstore.cpp 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/mstore/mstore.cpp 2006-10-25 08:56:47 UTC (rev 495) @@ -1363,6 +1363,12 @@ OTLKCON_DEBUGBREAK; } +#ifdef OTLKCON_DEBUG_MEM_DB + // Clear memory database debug file on every load. + DeleteFile(OTLKCON_DEBUG_MEM_DB_FILENAME); + Sleep( OTLKCON_DELETE_PAUSE ); +#endif //OTLKCON_DEBUG_MEM_DB + case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: Modified: trunk/otlkcon0/otlkcon_config.h =================================================================== --- trunk/otlkcon0/otlkcon_config.h 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/otlkcon_config.h 2006-10-25 08:56:47 UTC (rev 495) @@ -53,7 +53,9 @@ #endif // Should we use an in-memory database -//#define OTLKCON_USE_MEM_DB 1 +#define OTLKCON_USE_MEM_DB 1 +#define OTLKCON_DEBUG_MEM_DB 1 +#define OTLKCON_DEBUG_MEM_DB_FILENAME "C:\\otlkcon_memdb.ocdb" #ifdef OTLKCON_LOG #define OTLKCON_LOG_DEFAULT_FILE L"C:\\otlkcon.log" Modified: trunk/otlkcon0/otlkcon_sqlite_utils.cpp =================================================================== --- trunk/otlkcon0/otlkcon_sqlite_utils.cpp 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/otlkcon_sqlite_utils.cpp 2006-10-25 08:56:47 UTC (rev 495) @@ -53,6 +53,12 @@ databaseHandle = NULL; +#ifdef OTLKCON_DELETE_MSTORE_DB + // For debugging, start with a fresh file + DeleteFile(databaseFilename); + Sleep( OTLKCON_DELETE_PAUSE ); +#endif // OTLKCON_DELETE_MSTORE_DB + int sqlRes = sqlite3_open(databaseFilename, &databaseHandle); if ( sqlRes != SQLITE_OK ) { @@ -67,7 +73,15 @@ // sqlite3_trace(databaseHandle, XTraceFunc, NULL); #endif + // If we are debugging attach the stand-in database + // file for memory debugging. If we are not debugging + // attach the real memory database +#ifdef OTLKCON_DEBUG_MEM_DB + sqlRes = sqlCommand("ATTACH DATABASE '%s' AS memDb", + OTLKCON_DEBUG_MEM_DB_FILENAME); +#else sqlRes = sqlCommand("ATTACH DATABASE ':memory:' AS memDb"); +#endif //OTLKCON_DEBUG_MEM_DB sqlObjHandle = databaseHandle; Modified: trunk/otlkcon0/protocols/caldav/caldav.vcproj =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.vcproj 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/protocols/caldav/caldav.vcproj 2006-10-25 08:56:47 UTC (rev 495) @@ -181,7 +181,7 @@ UsePrecompiledHeader="2" WarningLevel="3" Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" + DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" Modified: trunk/otlkcon0/protocols/ical/libical/libical.vcproj =================================================================== --- trunk/otlkcon0/protocols/ical/libical/libical.vcproj 2006-10-19 20:58:17 UTC (rev 494) +++ trunk/otlkcon0/protocols/ical/libical/libical.vcproj 2006-10-25 08:56:47 UTC (rev 495) @@ -179,7 +179,7 @@ UsePrecompiledHeader="0" WarningLevel="3" Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" + DebugInformationFormat="3" CallingConvention="0" CompileAs="2" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-19 20:58:21
|
Revision: 494 http://svn.sourceforge.net/otlkcon/?rev=494&view=rev Author: kervin Date: 2006-10-19 13:58:17 -0700 (Thu, 19 Oct 2006) Log Message: ----------- (M2) Milestone 2. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IMsgStore.cpp Modified: trunk/otlkcon0/mstore/O_IMsgStore.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-10-15 21:44:11 UTC (rev 493) +++ trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-10-19 20:58:17 UTC (rev 494) @@ -954,6 +954,10 @@ SPropValue fIDProp = {0}; SPropValue fHashProp = {0}; + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, + OTLKCON_LOG_TARGET_ALL, + L"O_IMsgStore::OnAppointmentNameReq() called\n", className); + if( ev == NULL ) { OTLKCON_DEBUGBREAK @@ -1176,6 +1180,11 @@ LPSRowSet folderRow = NULL; O_ENTRYID *tmpEntryID; + + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, + OTLKCON_LOG_TARGET_ALL, + L"O_IMsgStore::OnSyncAppointmentComponents() called\n", className); + if( ev == NULL ) { OTLKCON_DEBUGBREAK This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-15 21:44:26
|
Revision: 493 http://svn.sourceforge.net/otlkcon/?rev=493&view=rev Author: kervin Date: 2006-10-15 14:44:11 -0700 (Sun, 15 Oct 2006) Log Message: ----------- Started 'Show Library' in OcHelper to help with debugging client machines. Fixes for M2. Modified Paths: -------------- trunk/otlkcon0/Installer/Makefile.mak trunk/otlkcon0/Installer/otlkcon.wxs trunk/otlkcon0/mstore/O_IProp.cpp trunk/otlkcon0/mstore/mstore.vcproj trunk/otlkcon0/ochelper/ochelper.cpp trunk/otlkcon0/ochelper/ochelper.h trunk/otlkcon0/ochelper/ochelper.vcproj trunk/otlkcon0/otlkcon.rc trunk/otlkcon0/protocols/caldav/caldav.cpp trunk/otlkcon0/protocols/file/file.vcproj Added Paths: ----------- trunk/otlkcon0/ochelper/dll_utility.cpp trunk/otlkcon0/ochelper/dll_utility.h Modified: trunk/otlkcon0/Installer/Makefile.mak =================================================================== --- trunk/otlkcon0/Installer/Makefile.mak 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/Installer/Makefile.mak 2006-10-15 21:44:11 UTC (rev 493) @@ -39,7 +39,7 @@ $(CP) ..\$(CONFIG)\ochelper.exe . $(CP) ..\$(CONFIG)\mstore32.dll . $(CP) ..\$(CONFIG)\smlog.dll . - $(CP) ..\sqlite\$(CONFIG)\sqlite32.dll . + $(CP) ..\sqlite\$(CONFIG)\ocsqlt32.dll . $(CP) ..\otlkcon.ini . link: Modified: trunk/otlkcon0/Installer/otlkcon.wxs =================================================================== --- trunk/otlkcon0/Installer/otlkcon.wxs 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/Installer/otlkcon.wxs 2006-10-15 21:44:11 UTC (rev 493) @@ -95,7 +95,7 @@ <File Id="smlogDll" Name="smlog.dll" DiskId='1' src='smlog.dll' Vital='yes' /> </Component> <Component Id='sqliteDllComp' Guid='5BDFAD58-8922-11DA-8BDE-F66BAD1E3F3A'> - <File Id="sqliteDll" Name="sqlite32.dll" DiskId='1' src='sqlite32.dll' Vital='yes' /> + <File Id="sqliteDll" Name="ocsqlt32.dll" DiskId='1' src='ocsqlt32.dll' Vital='yes' /> </Component> </Directory> Modified: trunk/otlkcon0/mstore/O_IProp.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-15 21:44:11 UTC (rev 493) @@ -3102,7 +3102,7 @@ name = (char *)sqlite3_column_text(queryStmt, 3); propNames->Kind.lpwstrName = (LPWSTR)memObj->malloc( sizeof( wchar_t ) * ((ULONG)strlen(name)+1) ); - swprintf_s(propNames->Kind.lpwstrName, strlen(name), L"%S", name); + swprintf_s(propNames->Kind.lpwstrName, strlen(name)+1, L"%S", name); } else { Modified: trunk/otlkcon0/mstore/mstore.vcproj =================================================================== --- trunk/otlkcon0/mstore/mstore.vcproj 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/mstore/mstore.vcproj 2006-10-15 21:44:11 UTC (rev 493) @@ -63,7 +63,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib sqlite32.lib" + AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib ocsqlt32.lib AllocProfiler.lib Comdlg32.lib" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="2" AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)"" @@ -147,15 +147,16 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib sqlite32.lib" + AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib ocsqlt32.lib Comdlg32.lib" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="1" AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)"" ModuleDefinitionFile="mstore.def" GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)/mstore.pdb" SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" + OptimizeReferences="0" + EnableCOMDATFolding="0" ImportLibrary="$(OutDir)/mstore.lib" TargetMachine="1" /> @@ -240,7 +241,7 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib sqlite32.lib AllocProfiler.lib Comdlg32.lib" + AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib ocsqlt32.lib AllocProfiler.lib Comdlg32.lib" ShowProgress="0" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="0" Added: trunk/otlkcon0/ochelper/dll_utility.cpp =================================================================== --- trunk/otlkcon0/ochelper/dll_utility.cpp (rev 0) +++ trunk/otlkcon0/ochelper/dll_utility.cpp 2006-10-15 21:44:11 UTC (rev 493) @@ -0,0 +1,76 @@ +/***************************************************************************** +Copyright 2006 Kervin L. Pierre + EMAIL: ot...@ad... + +This file is part of Otlkcon. + +Otlkcon is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +Otlkcon 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 +Lesser GNU General Public License for more details. + +You should have received a copy of the Lesser GNU General Public License +along with Otlkcon; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +#include "stdafx.h" +#include "dll_utility.h" +#include "ochelper.h" + +using namespace std; + +HRESULT otlkcon_loadlibrary(wstring name) +{ + HRESULT result = S_OK; + wstring tempName; + HINSTANCE hinstStub = NULL; + + if( name.length() > 1 ) + { + tempName = name; + } + else + { + tempName = OCHELPER_DEFAULT_DLL_NAME; + } + + hinstStub = LoadLibraryW( tempName.c_str() ); + if( hinstStub == NULL ) + { + ochelper_show_error(); + result = E_FAIL; + goto load_end; + } + +load_end: + return result; +} + +HRESULT ochelper_show_error() +{ + TCHAR szBuf[80]; + LPVOID lpMsgBuf; + DWORD dw = GetLastError(); + + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL ); + + wprintf( L"ERROR: %d: %s", dw, lpMsgBuf); + + LocalFree(lpMsgBuf); + + return S_OK; +} \ No newline at end of file Added: trunk/otlkcon0/ochelper/dll_utility.h =================================================================== --- trunk/otlkcon0/ochelper/dll_utility.h (rev 0) +++ trunk/otlkcon0/ochelper/dll_utility.h 2006-10-15 21:44:11 UTC (rev 493) @@ -0,0 +1,26 @@ +/***************************************************************************** +Copyright 2006 Kervin L. Pierre + EMAIL: ot...@ad... + +This file is part of Otlkcon. + +Otlkcon is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +Otlkcon 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 +Lesser GNU General Public License for more details. + +You should have received a copy of the Lesser GNU General Public License +along with Otlkcon; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*******************************************************************************/ + +#include <string> + +HRESULT otlkcon_loadlibrary(std::wstring name); +HRESULT ochelper_show_error(); \ No newline at end of file Modified: trunk/otlkcon0/ochelper/ochelper.cpp =================================================================== --- trunk/otlkcon0/ochelper/ochelper.cpp 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/ochelper/ochelper.cpp 2006-10-15 21:44:11 UTC (rev 493) @@ -22,6 +22,7 @@ #include "stdafx.h" #include "ochelper.h" +#include "dll_utility.h" #include <string> #include <shlwapi.h> @@ -155,11 +156,13 @@ int find_flag = 0; int mapisvcinf_flag = 0; + int show_library_flag = 0; int merge_mapisvcinf_flag = 0; wstring find_flag_arg = L""; wstring mapisvcinf_flag_arg = L""; wstring merge_mapisvcinf_flag_arg = L""; + wstring show_library_flag_arg = L""; wstring *prev_flag = NULL; for(int i=1; i<result; i++) @@ -179,6 +182,11 @@ merge_mapisvcinf_flag = 1; prev_flag = &merge_mapisvcinf_flag_arg; } + else if( wcscmp(args[i], L"--show-library") == 0 ) + { + show_library_flag = 1; + prev_flag = &show_library_flag_arg; + } else if( wcscmp(args[i], L"--help") == 0 ) { print_options(0, wstring(L"") ); @@ -221,6 +229,15 @@ else print_options(1, wstring( L"ERROR: Unknown option for --find flag.") ); } + if( show_library_flag == 1 ) + { + result = otlkcon_loadlibrary( L"" ); + if( result != S_OK ) + { + wprintf( L"ERROR: Could not load the 'mstore32.dll' library\n" ); + } + } + if( mapisvcinf_flag == 1 ) { if( mapisvcinf_flag_arg.length() == 0 ) Modified: trunk/otlkcon0/ochelper/ochelper.h =================================================================== --- trunk/otlkcon0/ochelper/ochelper.h 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/ochelper/ochelper.h 2006-10-15 21:44:11 UTC (rev 493) @@ -36,6 +36,8 @@ #define OUTLOOK_REGKEY_MAX_LEN 256 #define LINE_MAX 1024 +#define OCHELPER_DEFAULT_DLL_NAME L"mstore32.dll" + typedef BOOL (STDAPICALLTYPE FGETCOMPONENTPATH) (LPSTR szComponent, LPSTR szQualifier, Modified: trunk/otlkcon0/ochelper/ochelper.vcproj =================================================================== --- trunk/otlkcon0/ochelper/ochelper.vcproj 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/ochelper/ochelper.vcproj 2006-10-15 21:44:11 UTC (rev 493) @@ -148,8 +148,8 @@ AdditionalLibraryDirectories=""$(OutDir)"" GenerateDebugInformation="false" SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" + OptimizeReferences="0" + EnableCOMDATFolding="0" TargetMachine="1" /> <Tool @@ -271,6 +271,10 @@ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" > <File + RelativePath=".\dll_utility.cpp" + > + </File> + <File RelativePath=".\ochelper.cpp" > </File> @@ -309,6 +313,10 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > <File + RelativePath=".\dll_utility.h" + > + </File> + <File RelativePath=".\ochelper.h" > </File> Modified: trunk/otlkcon0/otlkcon.rc =================================================================== --- trunk/otlkcon0/otlkcon.rc 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/otlkcon.rc 2006-10-15 21:44:11 UTC (rev 493) @@ -113,10 +113,14 @@ EDITTEXT IDC_ACCOUNT_PASSWORD_EDIT,117,105,124,13,ES_PASSWORD | ES_AUTOHSCROLL EDITTEXT IDC_ACCOUNT_URI_EDIT,117,123,124,13,ES_AUTOHSCROLL + EDITTEXT IDC_ACCOUNT_PRINCIPLE_URI_EDIT,117,143,124,13, + ES_AUTOHSCROLL CONTROL "Default Account",IDC_ACCOUNT_DEFAULT_CHECK,"Button", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,36,182,86,10 CONTROL "Enabled",IDC_ACCOUNT_ENABLE_CHECK,"Button", BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,36,198,86,10 + CONTROL "Enable Address Book",IDC_ACCOUNT_ENABLE_AB_CHECK,"Button", + BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,36,211,86,10 GROUPBOX "Basic Options",IDC_STATIC,18,53,245,177 LTEXT "Account",IDC_STATIC,39,17,57,15 LTEXT "Your Name",IDC_STATIC,39,67,57,15 @@ -128,10 +132,6 @@ 12,WS_DISABLED PUSHBUTTON "New",IDC_ACCOUNT_NEW_BUTTON,275,32,73,12 PUSHBUTTON "Delete",IDC_ACCOUNT_DEL_BUTTON,275,50,73,12 - CONTROL "Enable Address Book",IDC_ACCOUNT_ENABLE_AB_CHECK,"Button", - BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_TABSTOP,36,211,86,10 - EDITTEXT IDC_ACCOUNT_PRINCIPLE_URI_EDIT,117,143,124,13, - ES_AUTOHSCROLL LTEXT "Principle URI",IDC_STATIC,39,141,57,15 END Modified: trunk/otlkcon0/protocols/caldav/caldav.cpp =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-10-15 21:44:11 UTC (rev 493) @@ -27,10 +27,8 @@ #include <sstream> -#ifdef OTLKCON_HAS_REGEX #include <boost/regex/config.hpp> #include <boost/regex.hpp> -#endif // OTLKCON_HAS_REGEX CaldavConnection::CaldavConnection() { @@ -743,8 +741,6 @@ { HRESULT result = S_OK; -#ifdef OTLKCON_HAS_REGEX - boost::wregex nameReg( L"^[a-zA-Z0-9!()',*$%.+_-]{1,}$"); if( boost::regex_match(name, nameReg ) ) @@ -755,7 +751,6 @@ { result = E_FAIL; } -#endif return result; } Modified: trunk/otlkcon0/protocols/file/file.vcproj =================================================================== --- trunk/otlkcon0/protocols/file/file.vcproj 2006-10-15 03:18:26 UTC (rev 492) +++ trunk/otlkcon0/protocols/file/file.vcproj 2006-10-15 21:44:11 UTC (rev 493) @@ -179,7 +179,7 @@ UsePrecompiledHeader="1" WarningLevel="3" Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" + DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-15 03:18:36
|
Revision: 492 http://svn.sourceforge.net/otlkcon/?rev=492&view=rev Author: kervin Date: 2006-10-14 20:18:26 -0700 (Sat, 14 Oct 2006) Log Message: ----------- Fixed ABP Login()/USER_CANCEL bug. Release build won't load. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IABProvider.cpp trunk/otlkcon0/mstore/mstore.cpp trunk/otlkcon0/mstore/mstore.vcproj trunk/otlkcon0/protocols/caldav/caldav.cpp Modified: trunk/otlkcon0/mstore/O_IABProvider.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IABProvider.cpp 2006-10-11 19:14:19 UTC (rev 491) +++ trunk/otlkcon0/mstore/O_IABProvider.cpp 2006-10-15 03:18:26 UTC (rev 492) @@ -177,14 +177,18 @@ goto logon_end; } - if( abpEnabled == FALSE ) - { - // We are not allowed to run for now + // FIXME: We need to find a good way to disable ABP. + // Apparently E_USER_CANCEL causes Outlook to + // exit. - *lppABLogon = NULL; - return MAPI_E_USER_CANCEL; - } + // if( abpEnabled == FALSE ) + // { + // // We are not allowed to run for now + //*lppABLogon = NULL; + //return MAPI_E_USER_CANCEL; + // } + tempAB = new O_IABLogon(); // There is a 1-to-1 relationship between the store and logon Modified: trunk/otlkcon0/mstore/mstore.cpp =================================================================== --- trunk/otlkcon0/mstore/mstore.cpp 2006-10-11 19:14:19 UTC (rev 491) +++ trunk/otlkcon0/mstore/mstore.cpp 2006-10-15 03:18:26 UTC (rev 492) @@ -1395,9 +1395,9 @@ // WaitForSingleObject() to signal // thread termination. Verifier goes // crazy with the code below. - //Sleep(1000); - //TerminateThread(g_eventThreadHandle, -1); - //CloseHandle(g_eventThreadHandle); + Sleep(1000); + TerminateThread(g_eventThreadHandle, -1); + CloseHandle(g_eventThreadHandle); } // if Modified: trunk/otlkcon0/mstore/mstore.vcproj =================================================================== --- trunk/otlkcon0/mstore/mstore.vcproj 2006-10-11 19:14:19 UTC (rev 491) +++ trunk/otlkcon0/mstore/mstore.vcproj 2006-10-15 03:18:26 UTC (rev 492) @@ -66,7 +66,7 @@ AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib sqlite32.lib" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="2" - AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)"" + AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)"" ModuleDefinitionFile="mstore.def" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/mstore.pdb" @@ -150,7 +150,7 @@ AdditionalDependencies="smlog.lib mapi32.lib advapi32.lib comctl32.lib ole32.lib sqlite32.lib" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="1" - AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)"" + AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)"" ModuleDefinitionFile="mstore.def" GenerateDebugInformation="true" SubSystem="2" @@ -244,7 +244,7 @@ ShowProgress="0" OutputFile="$(OutDir)/mstore32.dll" LinkIncremental="0" - AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)";"$(SolutionDir)\icu\$(ConfigurationName)"" + AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)\sqlite\$(ConfigurationName)";"$(SolutionDir)\boost-bin\libs\regex\$(ConfigurationName)"" ModuleDefinitionFile="mstore.def" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/mstore.pdb" Modified: trunk/otlkcon0/protocols/caldav/caldav.cpp =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-10-11 19:14:19 UTC (rev 491) +++ trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-10-15 03:18:26 UTC (rev 492) @@ -27,8 +27,10 @@ #include <sstream> +#ifdef OTLKCON_HAS_REGEX #include <boost/regex/config.hpp> #include <boost/regex.hpp> +#endif // OTLKCON_HAS_REGEX CaldavConnection::CaldavConnection() { @@ -740,6 +742,9 @@ HRESULT CaldavConnection::ValidateFilename( wstring name ) { HRESULT result = S_OK; + +#ifdef OTLKCON_HAS_REGEX + boost::wregex nameReg( L"^[a-zA-Z0-9!()',*$%.+_-]{1,}$"); if( boost::regex_match(name, nameReg ) ) @@ -750,6 +755,7 @@ { result = E_FAIL; } +#endif return result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-11 19:14:41
|
Revision: 491 http://svn.sourceforge.net/otlkcon/?rev=491&view=rev Author: kervin Date: 2006-10-11 12:14:19 -0700 (Wed, 11 Oct 2006) Log Message: ----------- Apply libical warnings patch. Sync my changes. Bad crasher, probably due to disabling Address book stub. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IABProvider.cpp trunk/otlkcon0/mstore/O_IABProvider.h trunk/otlkcon0/mstore/O_ITable.cpp trunk/otlkcon0/protocols/ical/libical/ical.h trunk/otlkcon0/protocols/ical/libical/icalcomponent.c trunk/otlkcon0/protocols/ical/libical/icalduration.c trunk/otlkcon0/protocols/ical/libical/icalenums.c trunk/otlkcon0/protocols/ical/libical/icallangbind.c trunk/otlkcon0/protocols/ical/libical/icalmime.c trunk/otlkcon0/protocols/ical/libical/icalparameter.c trunk/otlkcon0/protocols/ical/libical/icalparser.c trunk/otlkcon0/protocols/ical/libical/icalproperty.c trunk/otlkcon0/protocols/ical/libical/icalrecur.c trunk/otlkcon0/protocols/ical/libical/icalrestriction.c trunk/otlkcon0/protocols/ical/libical/icaltimezone.c trunk/otlkcon0/protocols/ical/libical/icalvalue.c trunk/otlkcon0/protocols/ical/libical/sspm.c Modified: trunk/otlkcon0/mstore/O_IABProvider.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IABProvider.cpp 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/mstore/O_IABProvider.cpp 2006-10-11 19:14:19 UTC (rev 491) @@ -46,6 +46,7 @@ memObj = m; cRef = 1; + abpEnabled = FALSE; OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"O_IABProvider::Create() called.\n"); @@ -176,6 +177,14 @@ goto logon_end; } + if( abpEnabled == FALSE ) + { + // We are not allowed to run for now + + *lppABLogon = NULL; + return MAPI_E_USER_CANCEL; + } + tempAB = new O_IABLogon(); // There is a 1-to-1 relationship between the store and logon @@ -305,6 +314,7 @@ { profPropsCount = 0; profTags.aulPropTag[profPropsCount++] = PR_PST_PATH; + profTags.aulPropTag[profPropsCount++] = PR_OTLKCON_AB_ENABLED; profTags.cValues = profPropsCount; result = lpServiceProfileObj->GetProps((LPSPropTagArray)&profTags, 0, &profPropsCount, &profProps); @@ -322,6 +332,14 @@ dbFilename = profProps[i].Value.lpszA; } } + else if( PROP_ID(profProps[i].ulPropTag) + == PROP_ID(PR_OTLKCON_AB_ENABLED) ) + { + if( PROP_TYPE(profProps[i].ulPropTag) == PT_BOOLEAN ) + { + abpEnabled = profProps[i].Value.b; + } + } } } } Modified: trunk/otlkcon0/mstore/O_IABProvider.h =================================================================== --- trunk/otlkcon0/mstore/O_IABProvider.h 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/mstore/O_IABProvider.h 2006-10-11 19:14:19 UTC (rev 491) @@ -43,6 +43,8 @@ HINSTANCE hInstance; + BOOL abpEnabled; + private: ULONG cRef; CRITICAL_SECTION objectCS; Modified: trunk/otlkcon0/mstore/O_ITable.cpp =================================================================== --- trunk/otlkcon0/mstore/O_ITable.cpp 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/mstore/O_ITable.cpp 2006-10-11 19:14:19 UTC (rev 491) @@ -55,6 +55,8 @@ O_ITable::~O_ITable(void) { + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"%S->O_ITable::~O_IProp(): Goodbye cruel world!....", className); + DeleteCriticalSection(&objectCS); Destroy(); } Modified: trunk/otlkcon0/protocols/ical/libical/ical.h =================================================================== --- trunk/otlkcon0/protocols/ical/libical/ical.h 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/ical.h 2006-10-11 19:14:19 UTC (rev 491) @@ -3636,3 +3636,13 @@ #endif /*__ICALLANGBIND_H__*/ +#ifndef __ICAL_BUFFER_SIZE_DEFINITION_H__ +#define __ICAL_BUFFER_SIZE_DEFINITION_H__ + +#define OTLKCON_LIBICAL_BUFFER_VERYSMALL 32 +#define OTLKCON_LIBICAL_BUFFER_SMALL 128 +#define OTLKCON_LIBICAL_BUFFER_MEDIUM 512 +#define OTLKCON_LIBICAL_BUFFER_LARGE 1024 + +#endif //#ifndef __ICAL_BUFFER_SIZE_DEFINITION_H__ + Modified: trunk/otlkcon0/protocols/ical/libical/icalcomponent.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalcomponent.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalcomponent.c 2006-10-11 19:14:19 UTC (rev 491) @@ -123,7 +123,7 @@ return 0; } - strcpy(comp->id,"comp"); + strcpy_s(comp->id,sizeof(comp->id),"comp"); comp->kind = kind; comp->properties = pvl_newlist(); @@ -2233,7 +2233,7 @@ /* We didn't find a VTIMEZONE that matched, so we have to rename the TZID, using the maximum numerical suffix found + 1. */ tzid_copy = _strdup (tzid); - sprintf (suffix_buf, "%i", max_suffix + 1); + sprintf_s (suffix_buf, "%i", max_suffix + 1); new_tzid = (char *)malloc (tzid_len + strlen (suffix_buf) + 1); if (!new_tzid || !tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); Modified: trunk/otlkcon0/protocols/ical/libical/icalduration.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalduration.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalduration.c 2006-10-11 19:14:19 UTC (rev 491) @@ -30,6 +30,7 @@ #endif #include "icalduration.h" +#include "ical.h" #include <assert.h> #include <string.h> @@ -183,14 +184,13 @@ return icaldurationtype_bad_duration(); } -#define TMP_BUF_SIZE 1024 static void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size, char* sep, unsigned int value) { - char temp[TMP_BUF_SIZE]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; - sprintf(temp,"%d",value); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,"%d",value); icalmemory_append_string(buf, buf_ptr, buf_size, temp); icalmemory_append_string(buf, buf_ptr, buf_size, sep); @@ -330,3 +330,4 @@ } + Modified: trunk/otlkcon0/protocols/ical/libical/icalenums.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalenums.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalenums.c 2006-10-11 19:14:19 UTC (rev 491) @@ -28,14 +28,18 @@ #include "config.h" #endif +#include "icaltime.h" +#include "ical.h" #include "icalenums.h" + #include <stdio.h> /* For fprintf */ #include <stdio.h> /* For stderr */ #include <string.h> /* For strncmp */ #include <assert.h> #include "icalmemory.h" + /*** @brief Allowed request status values */ static struct { @@ -103,16 +107,18 @@ /*** @brief Return the code for a request status */ + + char* icalenum_reqstat_code(icalrequeststatus stat) { int i, major, minor; - char tmpbuf[36]; + char tmpbuf[OTLKCON_LIBICAL_BUFFER_SMALL]; for (i=0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if ( request_status_map[i].kind == stat) { major = request_status_map[i].major; minor = request_status_map[i].minor; - sprintf(tmpbuf, "%i.%i", major, minor); + sprintf_s(tmpbuf,OTLKCON_LIBICAL_BUFFER_SMALL, "%i.%i", major, minor); return icalmemory_tmp_copy(tmpbuf); } } @@ -164,3 +170,4 @@ + Modified: trunk/otlkcon0/protocols/ical/libical/icallangbind.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icallangbind.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icallangbind.c 2006-10-11 19:14:19 UTC (rev 491) @@ -18,6 +18,8 @@ ======================================================================*/ +#include "icaltime.h" +#include "ical.h" #include "icalcomponent.h" #include "icalproperty.h" #include "icalerror.h" @@ -152,10 +154,9 @@ #define APPENDC(x) icalmemory_append_char(&buf, &buf_ptr, &buf_size, x); - const char* icallangbind_property_eval_string(icalproperty* prop, char* sep) { - char tmp[25]; + char tmp[OTLKCON_LIBICAL_BUFFER_VERYSMALL]; size_t buf_size = 1024; char* buf = (char *)icalmemory_new_buffer(buf_size); char* buf_ptr = buf; @@ -188,7 +189,7 @@ APPENDS(", 'pid' "); APPENDS(sep); APPENDC('\''); - snprintf(tmp,25,"%p",prop); + _snprintf_s(tmp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%p",prop); APPENDS(tmp); APPENDC('\''); Modified: trunk/otlkcon0/protocols/ical/libical/icalmime.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalmime.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalmime.c 2006-10-11 19:14:19 UTC (rev 491) @@ -26,6 +26,8 @@ ======================================================================*/ +#include "icaltime.h" +#include "ical.h" #include "icalmime.h" #include "icalerror.h" #include "icalmemory.h" @@ -189,8 +191,7 @@ for(i = 0; i <NUM_PARTS && parts[i].header.major != SSPM_NO_MAJOR_TYPE ; i++){ -#define TMPSZ 1024 - char mimetype[TMPSZ]; + char mimetype[OTLKCON_LIBICAL_BUFFER_LARGE]; char* major = sspm_major_type_string(parts[i].header.major); char* minor = sspm_minor_type_string(parts[i].header.minor); @@ -199,7 +200,7 @@ minor = parts[i].header.minor_text; } - sprintf(mimetype,"%s/%s",major,minor); + sprintf_s(mimetype,OTLKCON_LIBICAL_BUFFER_LARGE,"%s/%s",major,minor); comp = icalcomponent_new(ICAL_XLICMIMEPART_COMPONENT); @@ -388,3 +389,4 @@ } + Modified: trunk/otlkcon0/protocols/ical/libical/icalparameter.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalparameter.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalparameter.c 2006-10-11 19:14:19 UTC (rev 491) @@ -56,7 +56,7 @@ return 0; } - strcpy(v->id,"para"); + strcpy_s(v->id,sizeof(v->id),"para"); v->kind = kind; v->size = 0; Modified: trunk/otlkcon0/protocols/ical/libical/icalparser.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalparser.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalparser.c 2006-10-11 19:14:19 UTC (rev 491) @@ -37,7 +37,8 @@ #include "config.h" #endif - +#include "icaltime.h" +#include "ical.h" #include "pvl.h" #include "icalerror.h" #include "icalvalue.h" @@ -502,12 +503,12 @@ static void insert_error(icalcomponent* comp, char* text, char* message, icalparameter_xlicerrortype type) { - char temp[1024]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; if (text == 0){ - snprintf(temp,1024,"%s:",message); + _snprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,OTLKCON_LIBICAL_BUFFER_LARGE,"%s:",message); } else { - snprintf(temp,1024,"%s: %s",message,text); + _snprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,OTLKCON_LIBICAL_BUFFER_LARGE,"%s: %s",message,text); } icalcomponent_add_property @@ -911,12 +912,12 @@ /* Don't add properties without value */ if (value == 0){ - char temp[200]; /* HACK */ + char temp[OTLKCON_LIBICAL_BUFFER_MEDIUM]; /* HACK */ icalproperty_kind prop_kind = icalproperty_isa(prop); icalcomponent* tail = (icalcomponent *)pvl_data(pvl_tail(parser->components)); - sprintf(temp,"Cant parse as %s value in %s property. Removing entire property", + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_MEDIUM,"Cant parse as %s value in %s property. Removing entire property", icalvalue_kind_to_string(value_kind), icalproperty_kind_to_string(prop_kind)); @@ -939,12 +940,12 @@ } else { if (vcount == 0){ - char temp[200]; /* HACK */ + char temp[OTLKCON_LIBICAL_BUFFER_MEDIUM]; /* HACK */ icalproperty_kind prop_kind = icalproperty_isa(prop); icalcomponent *tail = (icalcomponent *)pvl_data(pvl_tail(parser->components)); - sprintf(temp,"No value for %s property. Removing entire property", + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_MEDIUM,"No value for %s property. Removing entire property", icalproperty_kind_to_string(prop_kind)); insert_error(tail, str, temp, Modified: trunk/otlkcon0/protocols/ical/libical/icalproperty.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalproperty.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalproperty.c 2006-10-11 19:14:19 UTC (rev 491) @@ -104,7 +104,7 @@ return 0; } - strcpy(prop->id,"prop"); + strcpy_s(prop->id,sizeof(prop->id),"prop"); prop->kind = kind; prop->parameters = pvl_newlist(); Modified: trunk/otlkcon0/protocols/ical/libical/icalrecur.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalrecur.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalrecur.c 2006-10-11 19:14:19 UTC (rev 491) @@ -138,6 +138,9 @@ #include <stdint.h> #endif +#include "icaltime.h" +#include "ical.h" + #include "icalrecur.h" #include "icalerror.h" @@ -470,7 +473,7 @@ char* str; char *str_p; size_t buf_sz = 200; - char temp[20]; + char temp[OTLKCON_LIBICAL_BUFFER_VERYSMALL]; int i,j; if(recur->freq == ICAL_NO_RECURRENCE){ @@ -497,13 +500,13 @@ } if(recur->count != 0){ - sprintf(temp,"%d",recur->count); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%d",recur->count); icalmemory_append_string(&str,&str_p,&buf_sz,";COUNT="); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } if(recur->interval != 0){ - sprintf(temp,"%d",recur->interval); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%d",recur->interval); icalmemory_append_string(&str,&str_p,&buf_sz,";INTERVAL="); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } @@ -530,12 +533,12 @@ if (pos == 0) icalmemory_append_string(&str,&str_p,&buf_sz,daystr); else { - sprintf(temp,"%d%s",pos,daystr); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%d%s",pos,daystr); icalmemory_append_string(&str,&str_p,&buf_sz,temp); } } else { - sprintf(temp,"%d",array[i]); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%d",array[i]); icalmemory_append_string(&str,&str_p,&buf_sz, temp); } Modified: trunk/otlkcon0/protocols/ical/libical/icalrestriction.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalrestriction.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalrestriction.c 2006-10-11 19:14:19 UTC (rev 491) @@ -10,6 +10,8 @@ #include <config.h> #endif +#include "icaltime.h" +#include "ical.h" #include "icalrestriction.h" #include "icalenums.h" #include "icalerror.h" @@ -17,8 +19,6 @@ #include <assert.h> #include <stdio.h> /* For snprintf */ -#define TMP_BUF_SIZE 1024 - #ifdef WIN32 #define snprintf _snprintf #define strcasecmp stricmp @@ -322,9 +322,9 @@ assert(compare != -1); if (compare == 0){ - char temp[TMP_BUF_SIZE]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; - snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d", + _snprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE, OTLKCON_LIBICAL_BUFFER_LARGE,"Failed iTIP restrictions for %s property. Expected %s instances of the property and got %d", icalenum_property_kind_to_string((icalproperty_kind)kind), restr_string_map[restr], count); Modified: trunk/otlkcon0/protocols/ical/libical/icaltimezone.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icaltimezone.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icaltimezone.c 2006-10-11 19:14:19 UTC (rev 491) @@ -1440,7 +1440,7 @@ if (*buf == '#') continue; /* The format of each line is: "latitude longitude location". */ - if (sscanf (buf, "%4d%2d%2d %4d%2d%2d %s", + if (sscanf_s (buf, "%4d%2d%2d %4d%2d%2d %s", &latitude_degrees, &latitude_minutes, &latitude_seconds, &longitude_degrees, &longitude_minutes, Modified: trunk/otlkcon0/protocols/ical/libical/icalvalue.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/icalvalue.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/icalvalue.c 2006-10-11 19:14:19 UTC (rev 491) @@ -32,6 +32,8 @@ #include <config.h> #endif +#include "icaltime.h" +#include "ical.h" #include "icalerror.h" #include "icalmemory.h" #include "icalparser.h" @@ -76,7 +78,7 @@ return 0; } - strcpy(v->id,"val"); + strcpy_s(v->id,sizeof(v->id),"val"); v->kind = kind; v->size = 0; @@ -105,7 +107,7 @@ return 0; } - strcpy(newObj->id, old->id); + strcpy_s(newObj->id,sizeof(newObj->id), old->id); newObj->kind = old->kind; newObj->size = old->size; @@ -320,8 +322,8 @@ value = 0; if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"%s Values are not implemented", + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,"%s Values are not implemented", icalvalue_kind_to_string(kind)); *error = icalproperty_vanew_xlicerror( temp, @@ -406,8 +408,8 @@ /* HACK */ if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"GEO Values are not implemented"); + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,"GEO Values are not implemented"); *error = icalproperty_vanew_xlicerror( temp, icalparameter_new_xlicerrortype( @@ -517,7 +519,7 @@ if (error != 0 ){ char temp[TMP_BUF_SIZE]; - snprintf(temp,TMP_BUF_SIZE,"Unknown type for \'%s\'",str); + _snprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,OTLKCON_LIBICAL_BUFFER_LARGE,"Unknown type for \'%s\'",str); *error = icalproperty_vanew_xlicerror( temp, @@ -533,9 +535,9 @@ if (error != 0 && *error == 0 && value == 0){ - char temp[TMP_BUF_SIZE]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; - snprintf(temp,TMP_BUF_SIZE,"Failed to parse value: \'%s\'",str); + _snprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,OTLKCON_LIBICAL_BUFFER_LARGE,"Failed to parse value: \'%s\'",str); *error = icalproperty_vanew_xlicerror( temp, @@ -818,12 +820,12 @@ void print_time_to_string(char* str, const struct icaltimetype *data) { - char temp[20]; + char temp[OTLKCON_LIBICAL_BUFFER_VERYSMALL]; if (icaltime_is_utc(*data)){ - sprintf(temp,"%02d%02d%02dZ",data->hour,data->minute,data->second); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%02d%02d%02dZ",data->hour,data->minute,data->second); } else { - sprintf(temp,"%02d%02d%02d",data->hour,data->minute,data->second); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%02d%02d%02d",data->hour,data->minute,data->second); } strcat(str,temp); @@ -832,9 +834,9 @@ void print_date_to_string(char* str, struct icaltimetype *data) { - char temp[20]; + char temp[OTLKCON_LIBICAL_BUFFER_VERYSMALL]; - sprintf(temp,"%04d%02d%02d",data->year,data->month,data->day); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"%04d%02d%02d",data->year,data->month,data->day); strcat(str,temp); } Modified: trunk/otlkcon0/protocols/ical/libical/sspm.c =================================================================== --- trunk/otlkcon0/protocols/ical/libical/sspm.c 2006-10-05 22:25:19 UTC (rev 490) +++ trunk/otlkcon0/protocols/ical/libical/sspm.c 2006-10-11 19:14:19 UTC (rev 491) @@ -41,6 +41,9 @@ #include <stdlib.h> /* for malloc, free */ #include <string.h> /* for strcasecmp */ +#include "icaltime.h" +#include "ical.h" + #ifdef DMALLOC #include "dmalloc.h" #endif @@ -50,9 +53,7 @@ #define strcasecmp stricmp #endif -#define TMP_BUF_SIZE 1024 - enum mime_state { UNKNOWN_STATE, IN_HEADER, @@ -72,7 +73,7 @@ struct sspm_action_map *actions; char* (*get_string)(char *s, size_t size, void* data); void* get_string_data; - char temp[TMP_BUF_SIZE]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; enum mime_state state; }; @@ -149,7 +150,7 @@ char* sspm_get_parameter(char* line, char* parameter) { char *p,*s,*q; - static char name[1024]; + static char name[OTLKCON_LIBICAL_BUFFER_LARGE]; /* Find where the parameter name is in the line */ p = strstr(line,parameter); @@ -178,9 +179,9 @@ } if(s != 0){ - strncpy(name,p,(size_t)s-(size_t)p); + strncpy_s(name,OTLKCON_LIBICAL_BUFFER_LARGE,p,(size_t)s-(size_t)p); } else { - strcpy(name,p); + strcpy_s(name,OTLKCON_LIBICAL_BUFFER_LARGE,p); } /* Strip off trailing quote, if it exists */ @@ -196,11 +197,11 @@ char* sspm_property_name(char* line) { - static char name[1024]; + static char name[OTLKCON_LIBICAL_BUFFER_LARGE]; char *c = strchr(line,':'); if(c != 0){ - strncpy(name,line,(size_t)c-(size_t)line); + strncpy_s(name,OTLKCON_LIBICAL_BUFFER_LARGE,line,(size_t)c-(size_t)line); name[(size_t)c-(size_t)line] = '\0'; return name; } else { @@ -594,7 +595,7 @@ char* sspm_get_next_line(struct mime_impl *impl) { char* s; - s = impl->get_string(impl->temp,TMP_BUF_SIZE,impl->get_string_data); + s = impl->get_string(impl->temp,OTLKCON_LIBICAL_BUFFER_LARGE,impl->get_string_data); if(s == 0){ impl->state = END_OF_INPUT; @@ -705,9 +706,9 @@ /* read and discard until we get the right boundary. */ char* boundary; - char msg[256]; + char msg[OTLKCON_LIBICAL_BUFFER_MEDIUM]; - snprintf(msg,256, + _snprintf_s(msg,OTLKCON_LIBICAL_BUFFER_MEDIUM,OTLKCON_LIBICAL_BUFFER_MEDIUM, "Expected: %s--. Got: %s", parent_header->boundary,line); @@ -806,9 +807,9 @@ /* Got the wrong boundary, so read and discard until we get the right boundary. */ char* boundary; - char msg[256]; + char msg[OTLKCON_LIBICAL_BUFFER_MEDIUM]; - snprintf(msg,256, + _snprintf_s(msg,OTLKCON_LIBICAL_BUFFER_MEDIUM,OTLKCON_LIBICAL_BUFFER_MEDIUM, "Expected: %s. Got: %s", parent_header->boundary,line); @@ -916,11 +917,10 @@ void sspm_read_header(struct mime_impl *impl,struct sspm_header *header) { -#define BUF_SIZE 1024 #define MAX_HEADER_LINES 25 char *buf; - char header_lines[MAX_HEADER_LINES][BUF_SIZE]; /* HACK, hard limits */ + char header_lines[MAX_HEADER_LINES][OTLKCON_LIBICAL_BUFFER_LARGE]; /* HACK, hard limits */ int current_line = -1; int end = 0; @@ -951,9 +951,9 @@ impl->state = IN_HEADER; current_line++; - assert(strlen(buf) < BUF_SIZE); + assert(strlen(buf) < OTLKCON_LIBICAL_BUFFER_LARGE); - strcpy(header_lines[current_line],buf); + strcpy_s(header_lines[current_line],OTLKCON_LIBICAL_BUFFER_LARGE,buf); break; } @@ -986,7 +986,7 @@ buf_start++; } - assert( strlen(buf_start) + strlen(last_line) < BUF_SIZE); + assert( strlen(buf_start) + strlen(last_line) < OTLKCON_LIBICAL_BUFFER_LARGE); strcat(last_line,buf_start); @@ -1247,9 +1247,9 @@ void sspm_append_hex(struct sspm_buffer* buf, char ch) { - char tmp[3]; + char tmp[OTLKCON_LIBICAL_BUFFER_VERYSMALL]; - sprintf(tmp,"=%02X",ch); + sprintf_s(tmp,OTLKCON_LIBICAL_BUFFER_VERYSMALL,"=%02X",ch); sspm_append_string(buf,tmp); } @@ -1464,7 +1464,7 @@ { int i; - char temp[TMP_BUF_SIZE]; + char temp[OTLKCON_LIBICAL_BUFFER_LARGE]; char* major; char* minor; @@ -1478,19 +1478,19 @@ minor = header->minor_text; } - sprintf(temp,"Content-Type: %s/%s",major,minor); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,"Content-Type: %s/%s",major,minor); sspm_append_string(buf,temp); if(header->boundary != 0){ - sprintf(temp,";boundary=\"%s\"",header->boundary); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,";boundary=\"%s\"",header->boundary); sspm_append_string(buf,temp); } /* Append any content type parameters */ if(header->content_type_params != 0){ for(i=0; *(header->content_type_params[i])!= 0;i++){ - sprintf(temp,header->content_type_params[i]); + sprintf_s(temp,OTLKCON_LIBICAL_BUFFER_LARGE,header->content_type_params[i]); sspm_append_char(buf,';'); sspm_append_string(buf,temp); } @@ -1616,3 +1616,4 @@ return 0; } + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-05 22:25:23
|
Revision: 490 http://svn.sourceforge.net/otlkcon/?rev=490&view=rev Author: kervin Date: 2006-10-05 15:25:19 -0700 (Thu, 05 Oct 2006) Log Message: ----------- Fixed small but significant SetProps() issue. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IProp.cpp Modified: trunk/otlkcon0/mstore/O_IProp.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-05 00:37:50 UTC (rev 489) +++ trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-05 22:25:19 UTC (rev 490) @@ -1521,7 +1521,7 @@ { // Run the query sqlRes = sqlite3_bind_int(queryStmt, 1, - (*lppPropArray)[i].ulPropTag); + currTag); sqlRes = sqlite3_step(queryStmt); switch( sqlRes ) { @@ -1559,6 +1559,17 @@ = PROP_TAG(PT_ERROR, PROP_ID(lpPropTagArray->aulPropTag[i])); (*lppPropArray)[i].Value.err = MAPI_E_NOT_FOUND; } + + sqlRes = sqlite3_reset(queryStmt); + if ( sqlRes != SQLITE_OK ) + { + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"IProp::GetProps sqlite3_reset error: %S", + sqlite3_errmsg(sqlObj->databaseHandle)); + SetLastError(E_FAIL, "Error accessing database"); + result = E_FAIL; + goto intgetprops_failed; + } continue; } @@ -1599,7 +1610,7 @@ // How do you free this memory?? data = (unsigned char *)sqlite3_column_text(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - (*lppPropArray)[i].Value.lpszA = memObj->_strdupMore( &(*lppPropArray)[i], (const char *)data ); + (*lppPropArray)[i].Value.lpszA = memObj->_strdupMore((*lppPropArray), (const char *)data ); break; case PT_UNICODE: @@ -1607,14 +1618,14 @@ // How do you free this memory?? data = (unsigned char *)sqlite3_column_text16(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - (*lppPropArray)[i].Value.lpszW = memObj->w_strdupMore(&(*lppPropArray)[i], (const wchar_t *)data ); + (*lppPropArray)[i].Value.lpszW = memObj->w_strdupMore(&((*lppPropArray)[i]), (const wchar_t *)data ); break; case PT_BINARY: // SBinary bin tmpBinSize = sqlite3_column_bytes(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - memObj->lpAllocateMore(tmpBinSize+1, &(*lppPropArray)[i], (LPVOID*)&tmpBin); + memObj->lpAllocateMore(tmpBinSize+1, (*lppPropArray), (LPVOID*)&tmpBin); memset(tmpBin, 0, tmpBinSize+1); tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); @@ -1633,7 +1644,7 @@ // FIXME: Set PT_ERROR } - memObj->lpAllocateMore(tmpBinSize+1, &(*lppPropArray)[i], (LPVOID*)&tmpBin); + memObj->lpAllocateMore(tmpBinSize+1, (*lppPropArray), (LPVOID*)&tmpBin); memset(tmpBin, 0, tmpBinSize+1); tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); @@ -1709,7 +1720,7 @@ OTLKCON_DEBUGBREAK // FIXME: Set PT_ERROR; } - + sqlRes = sqlite3_reset(queryStmt); if ( sqlRes != SQLITE_OK ) { @@ -2471,8 +2482,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - _itoa_s( currPV.Value.i, buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt, 6, currPV.Value.i); break; case PT_LONG: @@ -2483,8 +2493,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - _ltoa_s( currPV.Value.l, buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt, 6, currPV.Value.l); break; case PT_R4: @@ -2495,8 +2504,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - sprintf_s( buff, 512, "%g", currPV.Value.flt ); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_double(queryStmt, 6, currPV.Value.flt); break; case PT_R8: @@ -2507,8 +2515,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - sprintf_s( buff, 512, "%g", currPV.Value.dbl ); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_double(queryStmt, 6, currPV.Value.dbl); break; case PT_BOOLEAN: @@ -2519,8 +2526,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - _ltoa_s( currPV.Value.b, buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,5,currPV.Value.b); break; case PT_CURRENCY: @@ -2544,8 +2550,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - sprintf_s( buff, 512, "%g", currPV.Value.at ); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); + sqlRes = sqlite3_bind_double(queryStmt, 6, currPV.Value.at); break; case PT_SYSTIME: @@ -2580,7 +2585,7 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.bin.lpb), + sqlRes = sqlite3_bind_blob(queryStmt, 6, currPV.Value.bin.lpb, currPV.Value.bin.cb, SQLITE_TRANSIENT); break; @@ -2604,21 +2609,20 @@ sqlRes = sqlite3_bind_int(queryStmt,3,0); sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); sqlRes = sqlite3_bind_int(queryStmt,5,0); - sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.lpguid), + sqlRes = sqlite3_bind_blob(queryStmt, 6, currPV.Value.lpguid, sizeof(struct _GUID), SQLITE_TRANSIENT); break; - case PT_I8: - // LARGE_INTEGER li - rowSize = 5*sizeof(ULONG)+sizeof(LARGE_INTEGER); - sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,3,0); - sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); - sqlRes = sqlite3_bind_int(queryStmt,5,0); - sprintf_s( buff, 512, "%d", currPV.Value.li ); - sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); - break; + //case PT_I8: + // // LARGE_INTEGER li + // rowSize = 5*sizeof(ULONG)+sizeof(LARGE_INTEGER); + // sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + // sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + // sqlRes = sqlite3_bind_int(queryStmt,3,0); + // sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + // sqlRes = sqlite3_bind_int(queryStmt,5,0); + // sqlRes = sqlite3_bind_int64(queryStmt,5,currPV.Value.li); + // break; // TODO: Fix multi-valued properties and transacted MV properties This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-05 00:37:57
|
Revision: 489 http://svn.sourceforge.net/otlkcon/?rev=489&view=rev Author: kervin Date: 2006-10-04 17:37:50 -0700 (Wed, 04 Oct 2006) Log Message: ----------- Worked on new Setup a little. Redid GetProps(), untested. It looks like Get/Set Props is still broken Modified Paths: -------------- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj trunk/otlkcon0/mstore/O_IProp.cpp Modified: trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj =================================================================== --- trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-10-04 05:21:31 UTC (rev 488) +++ trunk/otlkcon0/OpenConnectorSetup/OpenConnectorSetup.vdproj 2006-10-05 00:37:50 UTC (rev 489) @@ -15,50 +15,98 @@ { "Entry" { - "MsmKey" = "8:_1175B42B21546003DEA659919F3AA618" - "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" + "MsmKey" = "8:_0D77AFCCFF544AC6AF3023DF3B88D46E" + "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_0F2A5EDADEA94475B9D3F7777888276C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FE38AC9B61F44B99A4937F41E9FE6C4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_2064FE922890443BA320E51602079B00" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_638710A84D02E852D2703FDA2C2C3D5E" + "MsmKey" = "8:_40B250BEF4E03C8ACFE036AD60117685" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_AF8F2BBB0E327E7D7C8F9201CABB02B1" + "MsmKey" = "8:_495C34B58D364852A4D0B32D7DCEC05C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4E4FD2A441BD2C786F74F2D4E80C5B16" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_C341F81AD53DD48B15AD85F7D445B2DD" + "MsmKey" = "8:_5AB29EDD9D774065AF72BC4A5616566D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { + "MsmKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" + "OwnerKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BA99BFF9201A4432871F5C6E5BAB76FC" + "OwnerKey" = "8:_8E0150B70A9449B9BC2AFE2CF38250C0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BD5C8753C1A84F03A344495A57702560" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_C4DD9B5261AE4652865102BEE45DB230" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_E04F1061A0E24EABA9C2853F2443C24F" + "MsmKey" = "8:_DAA07661887D9C34DF0A45D2A69D9B87" "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_F886D592866648C6A2832E19F9BC747D" - "OwnerKey" = "8:_E04F1061A0E24EABA9C2853F2443C24F" + "MsmKey" = "8:_E05C9BCECCCA2727130EE23D540FCC8F" + "OwnerKey" = "8:_2064FE922890443BA320E51602079B00" "MsmSig" = "8:_UNDEFINED" } } @@ -123,6 +171,20 @@ { "CustomAction" { + "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_C46234A05EB5494CA49B3766BBC57682" + { + "Name" = "8:Primary Output from ochelper (Active)" + "Condition" = "8:" + "Object" = "8:_C4DD9B5261AE4652865102BEE45DB230" + "FileType" = "3:2" + "InstallAction" = "3:1" + "Arguments" = "8:--merge-mapisvcinf .\\otlkcon.ini --find mapisvcinf" + "EntryPoint" = "8:" + "Sequence" = "3:1" + "Identifier" = "8:_868D0523_FAA0_469E_A407_A0A9B0039AD2" + "InstallerClass" = "11:FALSE" + "CustomActionData" = "8:" + } } "DefaultFeature" { @@ -138,10 +200,10 @@ } "File" { - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1175B42B21546003DEA659919F3AA618" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D77AFCCFF544AC6AF3023DF3B88D46E" { - "SourcePath" = "8:MAPI32.dll" - "TargetName" = "8:MAPI32.dll" + "SourcePath" = "8:..\\otlkcon.ini" + "TargetName" = "8:otlkcon.ini" "Tag" = "8:" "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" "Condition" = "8:" @@ -154,12 +216,32 @@ "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" - "Exclude" = "11:TRUE" - "IsDependency" = "11:TRUE" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_638710A84D02E852D2703FDA2C2C3D5E" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1FE38AC9B61F44B99A4937F41E9FE6C4" { + "SourcePath" = "8:..\\otlkcon2.ico" + "TargetName" = "8:otlkcon2.ico" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_40B250BEF4E03C8ACFE036AD60117685" + { "SourcePath" = "8:smlog.dll" "TargetName" = "8:smlog.dll" "Tag" = "8:" @@ -178,8 +260,28 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AF8F2BBB0E327E7D7C8F9201CABB02B1" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_495C34B58D364852A4D0B32D7DCEC05C" { + "SourcePath" = "8:..\\otlkcon1.ico" + "TargetName" = "8:otlkcon1.ico" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4E4FD2A441BD2C786F74F2D4E80C5B16" + { "SourcePath" = "8:sqlite32.dll" "TargetName" = "8:sqlite32.dll" "Tag" = "8:" @@ -198,8 +300,68 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C341F81AD53DD48B15AD85F7D445B2DD" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_79BC0ED1F6E3432BA157C4491C3F0751" { + "SourcePath" = "8:..\\Installer\\License.rtf" + "TargetName" = "8:License.rtf" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5C8753C1A84F03A344495A57702560" + { + "SourcePath" = "8:..\\Installer\\Bitmaps\\bannrbmp.bmp" + "TargetName" = "8:bannrbmp.bmp" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DAA07661887D9C34DF0A45D2A69D9B87" + { + "SourcePath" = "8:MAPI32.dll" + "TargetName" = "8:MAPI32.dll" + "Tag" = "8:" + "Folder" = "8:_19142E5B9B904204AFEFD9CEF10DFEDE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E05C9BCECCCA2727130EE23D540FCC8F" + { "SourcePath" = "8:comdlg32.dll" "TargetName" = "8:comdlg32.dll" "Tag" = "8:" @@ -221,6 +383,29 @@ } "FileType" { + "{5EB83D71-FA18-4901-BE56-DE22E13CC478}:_8A182FFF32F3473590223B845BDB151E" + { + "Name" = "8:Open Connector Database File" + "Description" = "8:Open Connector Groupware Database File" + "Extensions" = "8:ocdb" + "MIME" = "8:application/ocdb" + "Icon" = "8:_1FE38AC9B61F44B99A4937F41E9FE6C4" + "IconIndex" = "3:0" + "Command" + { + "Command" = "8:_C4DD9B5261AE4652865102BEE45DB230" + } + "Verbs" + { + "{95C0C507-CBF0-42B8-B119-07219E384A4A}:_C7B3A699BC5C409989CC1A25BA40DD16" + { + "Command" = "8:&Open" + "Verb" = "8:open" + "Arguments" = "8:\"--databasefile %1\"" + "Order" = "3:0" + } + } + } } "Folder" { @@ -283,25 +468,25 @@ "Product" { "Name" = "8:Microsoft Visual Studio" - "ProductName" = "8:OpenConnectorSetup" - "ProductCode" = "8:{046DC7FC-0E42-4D21-88D0-14598D671882}" - "PackageCode" = "8:{3D73E0F2-CEEC-4086-8B4F-28313B7EBE0E}" + "ProductName" = "8:Open Connector Groupware" + "ProductCode" = "8:{81D70F95-062C-4D0D-B5C6-7A96CB23D452}" + "PackageCode" = "8:{A43F5046-8855-40D7-A2AF-0DE7D72B2823}" "UpgradeCode" = "8:{81AFB6EC-732F-431F-9161-81F0431B1388}" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:FALSE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" - "ProductVersion" = "8:1.0.0" - "Manufacturer" = "8:Edge Information Management" + "ProductVersion" = "8:0.1" + "Manufacturer" = "8:Open Connector Project" "ARPHELPTELEPHONE" = "8:" - "ARPHELPLINK" = "8:" - "Title" = "8:OpenConnectorSetup" - "Subject" = "8:" - "ARPCONTACT" = "8:Edge Information Management" - "Keywords" = "8:" - "ARPCOMMENTS" = "8:" - "ARPURLINFOABOUT" = "8:" - "ARPPRODUCTICON" = "8:" + "ARPHELPLINK" = "8:http://openconnector.org" + "Title" = "8:Open Connector Groupware" + "Subject" = "8:Free Outlook compatible Groupware and Calendar Application" + "ARPCONTACT" = "8:Kervin Pierre" + "Keywords" = "8:Groupware Calendar Outlook Office CalDAV" + "ARPCOMMENTS" = "8:Open Connector Groupware " + "ARPURLINFOABOUT" = "8:http://openconnector.org" + "ARPPRODUCTICON" = "8:_495C34B58D364852A4D0B32D7DCEC05C" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" @@ -431,7 +616,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } } @@ -462,7 +648,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "ShowProgress" @@ -506,7 +693,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "ShowProgress" @@ -556,11 +744,60 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } } } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_989DD8EAD69C4A67B4194BF99AF57FB0" + { + "Sequence" = "3:110" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BDF9003D530D49BF9C1F7BABF3FAB45B" { "Sequence" = "3:100" @@ -578,7 +815,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" @@ -626,7 +864,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" @@ -676,7 +915,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "UpdateText" @@ -687,8 +927,8 @@ "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" - "Setting" = "3:1" - "Value" = "8:#1258" + "Setting" = "3:2" + "Value" = "8:[Productname] Updated!" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } @@ -703,9 +943,57 @@ "Attributes" = "3:1" "Dialogs" { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3709C720B26D4A508AFEF9E39BE406C8" + { + "Sequence" = "3:200" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_79BC0ED1F6E3432BA157C4491C3F0751" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_824CD682CCE64F698C6DAC781918AA52" { - "Sequence" = "3:300" + "Sequence" = "3:400" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" @@ -720,14 +1008,15 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_92ACC370F3FE408C8C3C540697C1C439" { - "Sequence" = "3:200" + "Sequence" = "3:300" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" @@ -742,7 +1031,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } } @@ -764,7 +1054,8 @@ "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" - "Setting" = "3:1" + "Setting" = "3:2" + "Value" = "8:_BD5C8753C1A84F03A344495A57702560" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" @@ -800,9 +1091,37 @@ } "MergeModule" { - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_E04F1061A0E24EABA9C2853F2443C24F" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_0F2A5EDADEA94475B9D3F7777888276C" { "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:..\\Installer\\msxml4sxs32.msm" + "Properties" + { + } + "LanguageId" = "3:1033" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5AB29EDD9D774065AF72BC4A5616566D" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:..\\Installer\\msxml4sys32.msm" + "Properties" + { + } + "LanguageId" = "3:1033" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_8E0150B70A9449B9BC2AFE2CF38250C0" + { + "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm" "Properties" @@ -814,7 +1133,7 @@ "Feature" = "8:" "IsolateTo" = "8:" } - "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_F886D592866648C6A2832E19F9BC747D" + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_BA99BFF9201A4432871F5C6E5BAB76FC" { "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:TRUE" Modified: trunk/otlkcon0/mstore/O_IProp.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-04 05:21:31 UTC (rev 488) +++ trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-05 00:37:50 UTC (rev 489) @@ -1380,17 +1380,17 @@ ) { HRESULT result = S_OK; - char *queryStr, *propMatchStr; - //char *buff; int errFlag = 0, sqlRes = 0, rowCount = 0, tmpBinSize=0; ULONG currTag=0; size_t dataSize = 0; - //unsigned char *data; - const char **queryRemainder = NULL; - sqlite3_stmt * queryStmt = NULL; - //LPBYTE tmpBin, tmpSQLBin; + unsigned char *data; + sqlite3_stmt *queryStmt_regular = NULL, + *queryStmt_unspecified = NULL, + *queryStmt = NULL; + LPBYTE tmpBin, tmpSQLBin; int found; FILETIME tempFT = {0}; + char buff[512] = {0}; //Validate_IMAPIProp_GetProps(this,lpPropTagArray,ulFlags, // lpcValues,lppPropArray); @@ -1443,6 +1443,37 @@ } memset(*lppPropArray, 0, lpPropTagArray->cValues * sizeof(SPropValue)); + // Prepare the query for the PT_UNSPECIFIED case + sprintf_s(buff, 512, "SELECT * FROM %s WHERE %s = ? \ + AND TRANSACT_ID IN ( 0, ? ) \ + ORDER BY TRANSACT_ID DESC \ + LIMIT 1", + tableName, OTLKCON_PT_UNSPECIFIED_PROPTAG_STR ); + sqlRes = sqlite3_prepare( sqlObj->databaseHandle, buff, + -1, &queryStmt_unspecified, 0); + if(SQLITE_OK != sqlRes) + { + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"%S sqlite3_prepare error", + sqlite3_errmsg(sqlObj->databaseHandle)); + } + + // Prepare the query for the regular case + sprintf_s(buff, 512, "SELECT * FROM %s WHERE %s = ? \ + AND TRANSACT_ID IN ( 0, %d ) \ + ORDER BY TRANSACT_ID DESC \ + LIMIT 1", + tableName, OTLKCON_REGULAR_PROPTAG_STR, objNum ); + sqlRes = sqlite3_prepare( sqlObj->databaseHandle, buff, + -1, &queryStmt_regular, 0); + if(SQLITE_OK != sqlRes) + { + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"%S sqlite3_prepare error", + sqlite3_errmsg(sqlObj->databaseHandle)); + } + + // Now loop the values. for(ULONG i=0; i<lpPropTagArray->cValues; i++) { currTag = lpPropTagArray->aulPropTag[i]; @@ -1464,11 +1495,11 @@ { //OTLKCON_DEBUGBREAK; // Strip the property type by ANDing with 11111111111111110000000000000000 - propMatchStr = OTLKCON_PT_UNSPECIFIED_PROPTAG_STR; + queryStmt = queryStmt_unspecified; } else { - propMatchStr = OTLKCON_REGULAR_PROPTAG_STR; + queryStmt = queryStmt_regular; } // Check that the property is not in the 'deletedProperties' @@ -1485,26 +1516,30 @@ } } - // FIXME: Looks like the two queries in this loop - // can be rolled into one. - // Do we still not know about it? if( found == -1 ) { - // FIXME: Prepare outside loop - sqlRes = sqlObj->sqlCmdSingleInt( &rowCount, 0, - "SELECT COUNT(*) FROM %s WHERE %s = %d\ - AND TRANSACT_ID IN ( 0, %d ) \ - AND MV_SEQ = 0", - tableName, propMatchStr, lpPropTagArray->aulPropTag[i], objNum ); - if( sqlRes != S_OK ) + // Run the query + sqlRes = sqlite3_bind_int(queryStmt, 1, + (*lppPropArray)[i].ulPropTag); + sqlRes = sqlite3_step(queryStmt); + switch( sqlRes ) { - OTLKCON_DEBUGBREAK; - } + case SQLITE_DONE: + // No rows found. + found = 0; + break; - if( rowCount == 0 ) - { - found = 0; + case SQLITE_ROW: + // Rows found. + found = 1; + break; + + default: + // This was not expected + // FIXME: This is really an error. Set PT_ERROR + found = 0; + OTLKCON_DEBUGBREAK; } } @@ -1528,177 +1563,158 @@ } OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"%S->O_IProp::GetProps() : Found 0x%0.8X\n", className, currTag); - - //Get the rows themselves - // FIXME: Prepare outside loop - sqlRes = sqlObj->buildQuery( &queryStr, - "SELECT * FROM %s WHERE %s = %d \ - AND TRANSACT_ID IN ( 0, %d ) \ - ORDER BY TRANSACT_ID DESC \ - LIMIT 1", tableName, propMatchStr, - lpPropTagArray->aulPropTag[i], objNum ); - sqlRes = sqlite3_prepare( sqlObj->databaseHandle, queryStr, -1, - &queryStmt, queryRemainder); - sqlRes = sqlite3_step(queryStmt); + //(*lppPropArray)[i].ulPropTag = lpPropTagArray->aulPropTag[i]; + (*lppPropArray)[i].ulPropTag = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_PROPTAG_COL); - if( sqlRes == SQLITE_ROW ) - { - //(*lppPropArray)[i].ulPropTag = lpPropTagArray->aulPropTag[i]; - (*lppPropArray)[i].ulPropTag = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_PROPTAG_COL); + //Parse the data + ULONG ulPropTag = lpPropTagArray->aulPropTag[i]; + if(PT_UNSPECIFIED == PROP_TYPE(ulPropTag)) + { + ulPropTag = (*lppPropArray)[i].ulPropTag; + } // if - //Parse the data - ULONG ulPropTag = lpPropTagArray->aulPropTag[i]; - if(PT_UNSPECIFIED == PROP_TYPE(ulPropTag)) - { - ulPropTag = (*lppPropArray)[i].ulPropTag; - } // if - result = _QueryValue(queryStmt, &(*lppPropArray)[i], *lppPropArray); - if(FAILED(result)) - { - (*lppPropArray)[i].ulPropTag = PROP_TAG(PT_ERROR, PROP_ID((*lppPropArray)[i].ulPropTag)); - (*lppPropArray)[i].Value.err = result; - errFlag = 1; - } // if - /* - switch( PROP_TYPE(ulPropTag) ) - { - case PT_I2: - // short i - (*lppPropArray)[i].Value.i - = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - break; + switch( PROP_TYPE(ulPropTag) ) + { + case PT_I2: + // short i + (*lppPropArray)[i].Value.i + = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); + break; - case PT_LONG: - // long l or ul?? - (*lppPropArray)[i].Value.l - = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - break; - case PT_BOOLEAN: - // long l or ul?? - (*lppPropArray)[i].Value.b - = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); - break; + case PT_LONG: + // long l or ul?? + (*lppPropArray)[i].Value.l + = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); + break; - case PT_STRING8: - // LPSTR lpszA - // How do you free this memory?? - data = (unsigned char *)sqlite3_column_text(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - (*lppPropArray)[i].Value.lpszA = memObj->_strdup( (const char *)data ); - break; - case PT_UNICODE: - // LPSTR lpszW - // How do you free this memory?? - data = (unsigned char *)sqlite3_column_text16(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - (*lppPropArray)[i].Value.lpszW = memObj->w_strdup( (const wchar_t *)data ); - break; + case PT_BOOLEAN: + // long l or ul?? + (*lppPropArray)[i].Value.b + = sqlite3_column_int(queryStmt, OTLKCON_IPROP_TABLE_DATA_COL); + break; - case PT_BINARY: - // SBinary bin - tmpBinSize = sqlite3_column_bytes(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - memObj->lpAllocateBuffer(tmpBinSize+1, (LPVOID*)&tmpBin); - memset(tmpBin, 0, tmpBinSize+1); - tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - memcpy(tmpBin, tmpSQLBin, tmpBinSize); - (*lppPropArray)[i].Value.bin.lpb = tmpBin; - (*lppPropArray)[i].Value.bin.cb = tmpBinSize; - break; + case PT_STRING8: + // LPSTR lpszA + // How do you free this memory?? + data = (unsigned char *)sqlite3_column_text(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + (*lppPropArray)[i].Value.lpszA = memObj->_strdupMore( &(*lppPropArray)[i], (const char *)data ); + break; - case PT_CLSID: - // LPGUID lpguid - tmpBinSize = sqlite3_column_bytes(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - if( tmpBinSize != 16 ) - OTLKCON_DEBUGBREAK; + case PT_UNICODE: + // LPSTR lpszW + // How do you free this memory?? + data = (unsigned char *)sqlite3_column_text16(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + (*lppPropArray)[i].Value.lpszW = memObj->w_strdupMore(&(*lppPropArray)[i], (const wchar_t *)data ); + break; - memObj->lpAllocateBuffer(tmpBinSize+1, (LPVOID*)&tmpBin); - memset(tmpBin, 0, tmpBinSize+1); - tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - memcpy(tmpBin, tmpSQLBin, tmpBinSize); - (*lppPropArray)[i].Value.lpguid = (LPGUID)tmpBin; - break; + case PT_BINARY: + // SBinary bin + tmpBinSize = sqlite3_column_bytes(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + memObj->lpAllocateMore(tmpBinSize+1, &(*lppPropArray)[i], (LPVOID*)&tmpBin); + memset(tmpBin, 0, tmpBinSize+1); + tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + memcpy(tmpBin, tmpSQLBin, tmpBinSize); + (*lppPropArray)[i].Value.bin.lpb = (LPBYTE)tmpBin; + (*lppPropArray)[i].Value.bin.cb = tmpBinSize; + break; - case PT_OBJECT: - // According to my interpretion of the docs we - // shouldn't do this since PT_OBJECTs need to be - // accessed by OpenProperty(), but somoe clients - // use HrGetProps() to open table properties - // anyway. Hence, take care of that. + case PT_CLSID: + // LPGUID lpguid + tmpBinSize = sqlite3_column_bytes(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + if( tmpBinSize != 16 ) + { + OTLKCON_DEBUGBREAK; + // FIXME: Set PT_ERROR + } - (*lppPropArray)[i].Value.x = PR_NULL; + memObj->lpAllocateMore(tmpBinSize+1, &(*lppPropArray)[i], (LPVOID*)&tmpBin); + memset(tmpBin, 0, tmpBinSize+1); + tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + memcpy(tmpBin, tmpSQLBin, tmpBinSize); + (*lppPropArray)[i].Value.lpguid = (LPGUID)tmpBin; + break; -// // Open properties we are familiar with. -// switch( lpPropTagArray->aulPropTag[i] ) -// { -// case PR_CONTAINER_HIERARCHY: -// case PR_CONTAINER_CONTENTS: -// result = OpenProperty(lpPropTagArray->aulPropTag[i], -// &IID_IMAPITable, 0, MAPI_MODIFY, -// (LPUNKNOWN *)&tmpBin); -// if( result != S_OK ) -// { -// // OpenProperty() failed -// OTLKCON_DEBUGBREAK; -// } -//// FIXME: 64-bit pointer truncated warning. -//// MAPI needs to be updated; Forces pointers -//// to be stored in a 'LONG' in SPropValue.Value -//#pragma warning ( disable: 4311 ) -// (*lppPropArray)[i].Value.x = (LONG)tmpBin; -//#pragma warning ( default: 4311 ) -// t = (O_ITable*)tmpBin; -// t->Dump(0); -// t->GetRowCount(0, (ULONG*)&rowCount); -// break; -// -// default: -// // A PT_OBJECT we do not know how to open -// OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, -// L"IProp::GetProps unknown PT_OBJECT: 0x%0.8X", -// lpPropTagArray->aulPropTag[i] ); -// OTLKCON_DEBUGBREAK; -// break; -// } - break; + case PT_OBJECT: + // According to my interpretion of the docs we + // shouldn't do this since PT_OBJECTs need to be + // accessed by OpenProperty(), but somoe clients + // use HrGetProps() to open table properties + // anyway. Hence, take care of that. - case PT_SYSTIME: - // FILETIME ft - tmpBinSize = sqlite3_column_bytes(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - if( tmpBinSize != sizeof(FILETIME) ) - { - OTLKCON_DEBUGBREAK; - } + (*lppPropArray)[i].Value.x = PR_NULL; - tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, - OTLKCON_IPROP_TABLE_DATA_COL); - memcpy(&tempFT, tmpSQLBin, sizeof(FILETIME)); - (*lppPropArray)[i].Value.ft = tempFT; - break; + /*// Open properties we are familiar with. + switch( lpPropTagArray->aulPropTag[i] ) + { + case PR_CONTAINER_HIERARCHY: + case PR_CONTAINER_CONTENTS: + result = OpenProperty(lpPropTagArray->aulPropTag[i], + &IID_IMAPITable, 0, MAPI_MODIFY, + (LPUNKNOWN *)&tmpBin); + if( result != S_OK ) + { + // OpenProperty() failed + OTLKCON_DEBUGBREAK; + } + // FIXME: 64-bit pointer truncated warning. + // MAPI needs to be updated; Forces pointers + // to be stored in a 'LONG' in SPropValue.Value + #pragma warning ( disable: 4311 ) + (*lppPropArray)[i].Value.x = (LONG)tmpBin; + #pragma warning ( default: 4311 ) + t = (O_ITable*)tmpBin; + t->Dump(0); + t->GetRowCount(0, (ULONG*)&rowCount); + break; - default: - // Unknown type - errFlag = 1; - OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, - L"IProp::GetProps unknown type: 0x%0.8X", - PROP_TYPE(lpPropTagArray->aulPropTag[i]) ); - OTLKCON_DEBUGBREAK - }*/ - } + default: + // A PT_OBJECT we do not know how to open + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"IProp::GetProps unknown PT_OBJECT: 0x%0.8X", + lpPropTagArray->aulPropTag[i] ); + OTLKCON_DEBUGBREAK; + break; + }*/ + break; - sqlRes = sqlite3_finalize(queryStmt); + case PT_SYSTIME: + { + FILETIME tempFT = {0}; + tmpBinSize = sqlite3_column_bytes(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + if( tmpBinSize != sizeof(FILETIME) ) + { + // FIXME: Set PT_ERROR + OTLKCON_DEBUGBREAK; + } - memObj->free(queryStr); + tmpSQLBin = (LPBYTE)sqlite3_column_blob(queryStmt, + OTLKCON_IPROP_TABLE_DATA_COL); + memcpy(&tempFT, tmpSQLBin, sizeof(FILETIME)); + (*lppPropArray)[i].Value.ft = tempFT; + } + break; + default: + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"O_IProp::_IntGetProps() unknown type: 0x%0.8X", + PROP_TYPE((*lppPropArray)[i].ulPropTag) ); + OTLKCON_DEBUGBREAK + // FIXME: Set PT_ERROR; + } + + sqlRes = sqlite3_reset(queryStmt); if ( sqlRes != SQLITE_OK ) { OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, - L"IProp::GetProps sqlite3_finalize error: %S", + L"IProp::GetProps sqlite3_reset error: %S", sqlite3_errmsg(sqlObj->databaseHandle)); SetLastError(E_FAIL, "Error accessing database"); result = E_FAIL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-04 05:21:38
|
Revision: 488 http://svn.sourceforge.net/otlkcon/?rev=488&view=rev Author: kervin Date: 2006-10-03 22:21:31 -0700 (Tue, 03 Oct 2006) Log Message: ----------- Get/Set props broke. First builds on new workstation. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IProp.cpp Modified: trunk/otlkcon0/mstore/O_IProp.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-03 19:31:27 UTC (rev 487) +++ trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-04 05:21:31 UTC (rev 488) @@ -38,7 +38,7 @@ tblVersion = 0; //we using object pointer as a transaction ID //that is not UNIQUE between different processes - objNum = (int)this; + objNum = (long)this; parent = NULL; tableName = NULL; @@ -2333,9 +2333,10 @@ char * errMsg = NULL; const char *queryRemainder = NULL; SPropValue currPV = {0}; - int isMV=0; + int isMV=0, rowSize=0; //int rowSize; ULONG skip=0,j=0; + char buff[512] ={0}; lastCalledFunctionID = OTLKCON_IPROP_SETPROPS; strcpy_s(lastCalledFunctionName, OTLKCON_GETLASTERROR_FUNCTION_NAME_SIZE+1, @@ -2392,9 +2393,11 @@ goto setprops_fail; } // if - sqlRes = sqlite3_prepare( sqlObj->databaseHandle, - "INSERT OR REPLACE INTO ? VALUES ( ?, ?, ?, ?, ?, ? );", - -1, &currStmt, 0); + sprintf_s(buff, 512, "INSERT OR REPLACE INTO %s VALUES ( ?, ?, ?, ?, ?, ? )", + tableName ); + + sqlRes = sqlite3_prepare( sqlObj->databaseHandle, buff, + -1, &queryStmt, 0); if(SQLITE_OK != sqlRes) { OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, @@ -2442,176 +2445,163 @@ if( PROP_TYPE(currPV.ulPropTag) == PT_UNSPECIFIED ) OTLKCON_DEBUGBREAK; - switch( PROP_TYPE(lpPropValue->ulPropTag) ) + switch( PROP_TYPE(currPV.ulPropTag) ) { case PT_I2: /* short i */ rowSize = 5*sizeof(ULONG)+sizeof(short); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - _itoa_s( lpPropValue->Value.i, &buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + _itoa_s( currPV.Value.i, buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_LONG: /* long l or ul??*/ rowSize = 5*sizeof(ULONG)+sizeof(long); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - _ltoa_s( lpPropValue->Value.l, &buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + _ltoa_s( currPV.Value.l, buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_R4: /* float flt */ rowSize = 5*sizeof(ULONG)+sizeof(float); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sprintf_s( &buff, 512, "%g", lpPropValue->Value.flt ); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sprintf_s( buff, 512, "%g", currPV.Value.flt ); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_R8: /* double dbl */ rowSize = 5*sizeof(ULONG)+sizeof(double); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sprintf_s( &buff, 512, "%g", lpPropValue->Value.dbl ); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sprintf_s( buff, 512, "%g", currPV.Value.dbl ); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_BOOLEAN: /* unsigned short int b*/ rowSize = 5*sizeof(ULONG)+sizeof(unsigned short); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - _ltoa_s( lpPropValue->Value.b, &buff, 512, 10); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + _ltoa_s( currPV.Value.b, buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_CURRENCY: /* CURRENCY cur */ /* ??? not sure about this ??? */ rowSize = 5*sizeof(ULONG)+sizeof(CURRENCY); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_blob(queryStmt, 7, &(currPV.Value.cur), + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.cur), sizeof(currPV.Value.cur), SQLITE_TRANSIENT); break; case PT_APPTIME: /* double at */ rowSize = 5*sizeof(ULONG)+sizeof(double); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sprintf_s( &buff, 512, "%g", lpPropValue->Value.at ); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sprintf_s( buff, 512, "%g", currPV.Value.at ); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; case PT_SYSTIME: /* FILETIME ft */ - rowSize = 5*sizeof(ULONG)+sizeof(lpPropValue->Value.ft); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.ft), - sizeof(lpPropValue->Value.ft), SQLITE_TRANSIENT); + rowSize = 5*sizeof(ULONG)+sizeof(currPV.Value.ft); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.ft), + sizeof(currPV.Value.ft), SQLITE_TRANSIENT); break; case PT_STRING8: /* LPSTR lpszA */ rowSize = 5*sizeof(ULONG)+sizeof(double); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_text(queryStmt, 7, lpPropValue->Value.lpszA, -1, NULL); - rowSize = 5*sizeof(ULONG)+(ULONG)strlen(lpPropValue->Value.lpszA); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_text(queryStmt, 6, currPV.Value.lpszA, -1, NULL); + rowSize = 5*sizeof(ULONG)+(ULONG)strlen(currPV.Value.lpszA); break; case PT_BINARY: /* SBinary bin */ - rowSize = 5*sizeof(ULONG)+lpPropValue->Value.bin.cb; - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.bin.lpb), - lpPropValue->Value.bin.cb, SQLITE_TRANSIENT); + rowSize = 5*sizeof(ULONG)+currPV.Value.bin.cb; + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.bin.lpb), + currPV.Value.bin.cb, SQLITE_TRANSIENT); break; case PT_UNICODE: /* LPWSTR lpszW */ - rowSize = 5*sizeof(ULONG)+(ULONG)wcslen(lpPropValue->Value.lpszW); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_text16(queryStmt, 7, lpPropValue->Value.lpszW, -1, NULL); - rowSize = 5*sizeof(ULONG)+(ULONG)strlen(lpPropValue->Value.lpszA); + rowSize = 5*sizeof(ULONG)+(ULONG)wcslen(currPV.Value.lpszW); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_text16(queryStmt, 6, currPV.Value.lpszW, -1, NULL); + rowSize = 5*sizeof(ULONG)+(ULONG)strlen(currPV.Value.lpszA); break; case PT_CLSID: // LPGUID lpguid rowSize = 5*sizeof(ULONG)+sizeof(struct _GUID); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.lpguid), + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sqlRes = sqlite3_bind_blob(queryStmt, 6, &(currPV.Value.lpguid), sizeof(struct _GUID), SQLITE_TRANSIENT); break; case PT_I8: // LARGE_INTEGER li rowSize = 5*sizeof(ULONG)+sizeof(LARGE_INTEGER); - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,isReference); - sprintf_s( &buff, 512, "%d", lpPropValue->Value.li ); - sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,0); + sprintf_s( buff, 512, "%d", currPV.Value.li ); + sqlRes = sqlite3_bind_text(queryStmt, 6, buff, -1, NULL); break; // TODO: Fix multi-valued properties and transacted MV properties @@ -2621,6 +2611,7 @@ OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"IProp::SetProps Setting a PT_ERROR or PT_NULL"); //we do nothing + continue; break; case PT_OBJECT: @@ -2631,338 +2622,34 @@ // object. rowSize = 5*sizeof(ULONG)+1; // FIXME: This is wrong - sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); - sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); - sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); - sqlRes = sqlite3_bind_int(queryStmt,4,0); - sqlRes = sqlite3_bind_int(queryStmt,5,transactID); - sqlRes = sqlite3_bind_int(queryStmt,6,1); - sqlRes = sqlite3_bind_null(queryStmt, 7); + sqlRes = sqlite3_bind_int(queryStmt,1,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,2,currPV.ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,3,0); + sqlRes = sqlite3_bind_int(queryStmt,4,isTransacted?objNum:0); + sqlRes = sqlite3_bind_int(queryStmt,5,1); + sqlRes = sqlite3_bind_null(queryStmt,6); break; default: OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, - L"%d : unknown property type.\n", lpPropValue->ulPropTag); - hResult = MAPI_E_NOT_SUPPORTED; + L"ERROR: SetProps() : %d : unknown property type.\n", currPV.ulPropTag); + continue; break; } - -// switch( PROP_TYPE(currPV.ulPropTag) ) -// { -// case PT_I2: -// /* short i */ -// rowSize = 5*sizeof(ULONG)+sizeof(short); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d,'%d' )", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.i ); -// break; -// -// case PT_LONG: -// /* long l or ul??*/ -// rowSize = 5*sizeof(ULONG)+sizeof(long); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, '%ld' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.l ); -// break; -// -// case PT_R4: -// /* float flt */ -// rowSize = 5*sizeof(ULONG)+sizeof(float); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d,'%g' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.flt ); -// break; -// -// case PT_R8: -// /* double dbl */ -// rowSize = 5*sizeof(ULONG)+sizeof(double); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d,'%g' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.dbl ); -// break; -// -// case PT_BOOLEAN: -// /* unsigned short int b*/ -// rowSize = 5*sizeof(ULONG)+sizeof(unsigned short); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d,'%d' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.b ); -// break; -// -// case PT_CURRENCY: -// /* CURRENCY cur */ -// /* ??? not sure about this ??? */ -// rowSize = 5*sizeof(ULONG)+sizeof(CURRENCY); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, :DAT );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0 ); -// break; -// -// case PT_APPTIME: -// /* double at */ -// rowSize = 5*sizeof(ULONG)+sizeof(double); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d,'%g' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.at ); -// break; -// -// case PT_SYSTIME: -// /* FILETIME ft */ -// rowSize = 5*sizeof(ULONG)+sizeof(FILETIME); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, :DAT );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0 ); -// break; -// -// case PT_STRING8: -// /* LPSTR lpszA */ -// rowSize = 5*sizeof(ULONG)+strlen(currPV.Value.lpszA); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, '%s' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.lpszA ); -// break; -// -// case PT_BINARY: -// /* SBinary bin */ -// rowSize = 5*sizeof(ULONG)+currPV.Value.bin.cb; -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES (%d, %d, %d, %d, %d, :DAT );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0 ); -// break; -// -// case PT_UNICODE: -// /* LPWSTR lpszW */ -// rowSize = 5*sizeof(ULONG)+wcslen(currPV.Value.lpszW); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, '%S' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.lpszW ); -// break; -// -// case PT_CLSID: -// // LPGUID lpguid -// rowSize = 5*sizeof(ULONG)+sizeof(struct _GUID); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, :DAT );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0 ); -// break; -// -// case PT_I8: -// // LARGE_INTEGER li -// rowSize = 5*sizeof(ULONG)+sizeof(LARGE_INTEGER); -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, %d, '%d' );", -// tableName, rowSize, currPV.ulPropTag, 0, isTransacted?objNum:0, 0, currPV.Value.li ); -// break; -// -// // TODO: Fix multi-valued properties and transacted MV properties -// case PT_MV_I2: -// // SShortArray MVi -// isMV=1; -// for(j=0; j<lpPropArray[i].Value.MVi.cValues; j++) -// { -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, '%d' );", -// tableName, currPV.ulPropTag, j, 0, 0, currPV.Value.MVi.lpi[j]); -// sqlRes = sqlite3_exec(sqlObj->databaseHandle, queryStr, NULL, -// NULL, &errMsg); -// } -// break; -// -// case PT_MV_LONG: -// isMV=1; -// // SLongArray MVl -// for(j=0; j<lpPropArray[i].Value.MVl.cValues; j++) -// { -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, '%ld' );", -// tableName, currPV.ulPropTag, j, 0, 0, currPV.Value.MVl.lpl[j]); -// sqlRes = sqlite3_exec(sqlObj->databaseHandle, queryStr, NULL, -// NULL, &errMsg); -// } -// break; -// -// case PT_MV_R4: -// isMV=1; -// // SRealArray MVflt -// for(j=0; j<lpPropArray[i].Value.MVflt.cValues; j++) -// { -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, '%g' );", -// tableName, currPV.ulPropTag, j, 0, 0, currPV.Value.MVflt.lpflt); -// sqlRes = sqlite3_exec(sqlObj->databaseHandle, queryStr, NULL, -// NULL, &errMsg); -// } -// break; -// -// case PT_MV_DOUBLE: -// isMV=1; -// // SDoubleArray MVdbl -// for(j=0; j<lpPropArray[i].Value.MVdbl.cValues; j++) -// { -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s VALUES ( %d, %d, %d, %d, '%g' );", -// tableName, currPV.ulPropTag, j, 0, 0, currPV.Value.MVdbl.lpdbl); -// sqlRes = sqlite3_exec(sqlObj->databaseHandle, queryStr, NULL, -// NULL, &errMsg); -// } -// break; -// -// case PT_MV_CURRENCY: -// isMV=1; -// // SCurrencyArray MVcur -// ; -// break; -// -// case PT_MV_APPTIME: -// isMV=1; -// // SAppTimeArray MVat -// for(j=0; j<lpPropArray[i].Value.MVat.cValues; j++) -// { -// ; -// } -// break; -// -// case PT_MV_SYSTIME: -// // SDateTimeArray MVft -// for(j=0; j<lpPropArray[i].Value.MVat.cValues; j++) -// { -// ; -// } -// break; -// -// case PT_MV_BINARY: -// // SBinaryArray MVbin -// for(j=0; j<lpPropArray[i].Value.MVbin.cValues; j++) -// { -// ; -// } -// break; -// -// case PT_MV_STRING8: -// // SLPSTRArray MVszA -// for(j=0; j<lpPropArray[i].Value.MVszA.cValues; j++) -// { -// ; -// } -// break; -// -// case PT_MV_I8: -// // SLargeIntegerArray MVli -// for(j=0; j<lpPropArray[i].Value.MVli.cValues; j++) -// { -// ; -// } -// break; -// -// case PT_ERROR: -// OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, -// L"IProp::SetProps Setting a PT_ERROR"); -// break; -// -// case PT_NULL: -// case PT_OBJECT: -// // This is PT_OBJECT only for internal use -// // NB: the value is not saved!!! -// // TODO: Actually, what should happen is that the DATA column -// // should hold the name of the table that represents this -// // object. -// if( currPV.ulPropTag == PR_NULL ) -// break; -// sqlRes = sqlObj->buildQuery( &queryStr, -// "INSERT OR REPLACE INTO %s ( PropTag, MV_SEQ, TRANSACT_ID, IS_REF ) VALUES ( %d, %d, %d, %d );", -// tableName, currPV.ulPropTag, 0, 0, 1 ); -// break; -// -// default: -// OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, -// L"%d : unknown property type.\n", lpPropArray[i].ulPropTag); -// break; -// } - if(NULL != queryStr) + sqlRes = sqlite3_step(queryStmt); + if( sqlRes != SQLITE_DONE ) { - sqlRes = sqlite3_prepare( sqlObj->databaseHandle, queryStr, -1, - &queryStmt, &queryRemainder); - if ( sqlRes != SQLITE_OK ) - { - OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, - L"IProp::_IntSetProps sqlite3_prepare error: %S", - sqlite3_errmsg(sqlObj->databaseHandle)); - result = E_FAIL; - // TODO - // Henry: we need to set problem for that property - // and continue setting all other properties -// goto setprops_fail; - } - if(SQLITE_OK == sqlRes) - { - if(SUCCEEDED(_BindValue(queryStmt, &currPV))) - { - sqlite3_step(queryStmt); - } // if - - sqlRes = sqlite3_finalize(queryStmt); - if ( sqlRes != SQLITE_OK ) - { - OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, - L"IProp::_IntSetProps sqlite3_finalize error: %S", - sqlite3_errmsg(sqlObj->databaseHandle)); - result = E_FAIL; - // TODO - // Henry: we need to set problem for that property - // and continue setting all other properties -// goto setprops_fail; - } - } // if - } // if -// sqlite3_prepare( sqlObj->databaseHandle, queryStr, -1, -// &queryStmt, queryRemainder); -// switch( PROP_TYPE(PROP_TYPE(currPV.ulPropTag)) ) -// { -// case PT_CURRENCY: -// sqlRes = sqlite3_bind_blob(queryStmt, 1, &(currPV.Value.cur), -// sizeof(currPV.Value.cur), SQLITE_TRANSIENT); -// break; -// -// case PT_BINARY: -// sqlRes = sqlite3_bind_blob(queryStmt, 1, currPV.Value.bin.lpb, -// currPV.Value.bin.cb, SQLITE_TRANSIENT); -// break; -// -// case PT_CLSID: -// sqlRes = sqlite3_bind_blob(queryStmt, 1, currPV.Value.lpguid, -// sizeof(struct _GUID), SQLITE_TRANSIENT); -// break; -// -// case PT_SYSTIME: -// sqlRes = sqlite3_bind_blob(queryStmt, 1, &(currPV.Value.ft), -// sizeof(currPV.Value.ft), SQLITE_TRANSIENT); -// break; -// } -// -// //if( !isMV && queryStmt ) -// sqlite3_step(queryStmt); -// sqlRes = sqlite3_finalize(queryStmt); -// -// memObj->free(queryStr); -// queryStr = NULL; + OTLKCON_DEBUGBREAK; + } -// if ( sqlRes != SQLITE_OK ) -// { -// OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, -// L"IProp::_IntSetProps sqlite3_finalize error: %S", -// sqlite3_errmsg(sqlObj->databaseHandle)); -// result = E_FAIL; -// // TODO -// // Henry: we need to set problem for that property -// // and continue setting all other properties -// goto setprops_fail; -// } + sqlRes = sqlite3_reset(queryStmt); + if( sqlRes != SQLITE_OK ) + { + OTLKCON_DEBUGBREAK; + } - if(queryStr) - memObj->free(queryStr); - - if( isTransacted && S_OK == result) + if( isTransacted ) { // If the SetProp() call was successful, remove the // object from the deletedProperties list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-10-03 19:31:31
|
Revision: 487 http://svn.sourceforge.net/otlkcon/?rev=487&view=rev Author: kervin Date: 2006-10-03 12:31:27 -0700 (Tue, 03 Oct 2006) Log Message: ----------- Broken build. Syncing... Modified Paths: -------------- trunk/otlkcon0/mstore/O_IProp.cpp Modified: trunk/otlkcon0/mstore/O_IProp.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IProp.cpp 2006-09-30 20:39:10 UTC (rev 486) +++ trunk/otlkcon0/mstore/O_IProp.cpp 2006-10-03 19:31:27 UTC (rev 487) @@ -1485,9 +1485,13 @@ } } + // FIXME: Looks like the two queries in this loop + // can be rolled into one. + // Do we still not know about it? if( found == -1 ) { + // FIXME: Prepare outside loop sqlRes = sqlObj->sqlCmdSingleInt( &rowCount, 0, "SELECT COUNT(*) FROM %s WHERE %s = %d\ AND TRANSACT_ID IN ( 0, %d ) \ @@ -1526,6 +1530,7 @@ OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, L"%S->O_IProp::GetProps() : Found 0x%0.8X\n", className, currTag); //Get the rows themselves + // FIXME: Prepare outside loop sqlRes = sqlObj->buildQuery( &queryStr, "SELECT * FROM %s WHERE %s = %d \ AND TRANSACT_ID IN ( 0, %d ) \ @@ -2253,7 +2258,8 @@ return hResult; } - +// Bypasses transactions and sychronization. Was useful for getting +// around those issues. STDMETHODIMP O_IProp::_StoreOneProp(LPSPropValue lpPropValue) { HRESULT hResult = E_INVALIDARG; @@ -2386,6 +2392,17 @@ goto setprops_fail; } // if + sqlRes = sqlite3_prepare( sqlObj->databaseHandle, + "INSERT OR REPLACE INTO ? VALUES ( ?, ?, ?, ?, ?, ? );", + -1, &currStmt, 0); + if(SQLITE_OK != sqlRes) + { + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"%S sqlite3_prepare error", + sqlite3_errmsg(sqlObj->databaseHandle)); + } + + for( ULONG i=0; i<cValues; i++ ) { currPV=lpPropArray[i]; @@ -2425,15 +2442,211 @@ if( PROP_TYPE(currPV.ulPropTag) == PT_UNSPECIFIED ) OTLKCON_DEBUGBREAK; - queryStmt = NULL; - result = _BuildPropQuery( - sqlObj, - tableName, - &currPV, - isTransacted?objNum:0, - FALSE, - &queryStr); + switch( PROP_TYPE(lpPropValue->ulPropTag) ) + { + case PT_I2: + /* short i */ + rowSize = 5*sizeof(ULONG)+sizeof(short); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + _itoa_s( lpPropValue->Value.i, &buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + case PT_LONG: + /* long l or ul??*/ + rowSize = 5*sizeof(ULONG)+sizeof(long); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + _ltoa_s( lpPropValue->Value.l, &buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + case PT_R4: + /* float flt */ + rowSize = 5*sizeof(ULONG)+sizeof(float); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sprintf_s( &buff, 512, "%g", lpPropValue->Value.flt ); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + case PT_R8: + /* double dbl */ + rowSize = 5*sizeof(ULONG)+sizeof(double); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sprintf_s( &buff, 512, "%g", lpPropValue->Value.dbl ); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + case PT_BOOLEAN: + /* unsigned short int b*/ + rowSize = 5*sizeof(ULONG)+sizeof(unsigned short); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + _ltoa_s( lpPropValue->Value.b, &buff, 512, 10); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + case PT_CURRENCY: + /* CURRENCY cur */ + /* ??? not sure about this ??? */ + rowSize = 5*sizeof(ULONG)+sizeof(CURRENCY); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_blob(queryStmt, 7, &(currPV.Value.cur), + sizeof(currPV.Value.cur), SQLITE_TRANSIENT); + break; + + case PT_APPTIME: + /* double at */ + rowSize = 5*sizeof(ULONG)+sizeof(double); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sprintf_s( &buff, 512, "%g", lpPropValue->Value.at ); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + case PT_SYSTIME: + /* FILETIME ft */ + rowSize = 5*sizeof(ULONG)+sizeof(lpPropValue->Value.ft); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.ft), + sizeof(lpPropValue->Value.ft), SQLITE_TRANSIENT); + break; + + case PT_STRING8: + /* LPSTR lpszA */ + rowSize = 5*sizeof(ULONG)+sizeof(double); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_text(queryStmt, 7, lpPropValue->Value.lpszA, -1, NULL); + rowSize = 5*sizeof(ULONG)+(ULONG)strlen(lpPropValue->Value.lpszA); + break; + + case PT_BINARY: + /* SBinary bin */ + rowSize = 5*sizeof(ULONG)+lpPropValue->Value.bin.cb; + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.bin.lpb), + lpPropValue->Value.bin.cb, SQLITE_TRANSIENT); + break; + + case PT_UNICODE: + /* LPWSTR lpszW */ + rowSize = 5*sizeof(ULONG)+(ULONG)wcslen(lpPropValue->Value.lpszW); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_text16(queryStmt, 7, lpPropValue->Value.lpszW, -1, NULL); + rowSize = 5*sizeof(ULONG)+(ULONG)strlen(lpPropValue->Value.lpszA); + break; + + case PT_CLSID: + // LPGUID lpguid + rowSize = 5*sizeof(ULONG)+sizeof(struct _GUID); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sqlRes = sqlite3_bind_blob(queryStmt, 7, &(lpPropValue->Value.lpguid), + sizeof(struct _GUID), SQLITE_TRANSIENT); + break; + + case PT_I8: + // LARGE_INTEGER li + rowSize = 5*sizeof(ULONG)+sizeof(LARGE_INTEGER); + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,isReference); + sprintf_s( &buff, 512, "%d", lpPropValue->Value.li ); + sqlRes = sqlite3_bind_text(queryStmt, 7, buff, -1, NULL); + break; + + // TODO: Fix multi-valued properties and transacted MV properties + + case PT_ERROR: + case PT_NULL: + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"IProp::SetProps Setting a PT_ERROR or PT_NULL"); + //we do nothing + break; + + case PT_OBJECT: + // This is PT_OBJECT only for internal use + // NB: the value is not saved!!! + // TODO: Actually, what should happen is that the DATA column + // should hold the name of the table that represents this + // object. + + rowSize = 5*sizeof(ULONG)+1; // FIXME: This is wrong + sqlRes = sqlite3_bind_text(queryStmt, 1, lpszTableName, -1, NULL); + sqlRes = sqlite3_bind_int(queryStmt,2,rowSize); + sqlRes = sqlite3_bind_int(queryStmt,3,lpPropValue->ulPropTag); + sqlRes = sqlite3_bind_int(queryStmt,4,0); + sqlRes = sqlite3_bind_int(queryStmt,5,transactID); + sqlRes = sqlite3_bind_int(queryStmt,6,1); + sqlRes = sqlite3_bind_null(queryStmt, 7); + break; + + default: + OTLKCON_LOG_PRINTF(OTLKCON_LOG_LEVEL_INFO, OTLKCON_LOG_TARGET_ALL, + L"%d : unknown property type.\n", lpPropValue->ulPropTag); + hResult = MAPI_E_NOT_SUPPORTED; + break; + } + // switch( PROP_TYPE(currPV.ulPropTag) ) // { // case PT_I2: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-09-30 20:39:24
|
Revision: 486 http://svn.sourceforge.net/otlkcon/?rev=486&view=rev Author: kervin Date: 2006-09-30 13:39:10 -0700 (Sat, 30 Sep 2006) Log Message: ----------- Clean up that 'typeID' stuff in the entryId. We no longer use MAPI types to find the primary interface. Took on the 'Browse' button crasher bug. Now works for me, again. There is a crasher on shutdown. This needs to be fixed. Upload test on Oracle works. Modified Paths: -------------- trunk/otlkcon0/mstore/O_IAttach.cpp trunk/otlkcon0/mstore/O_IContainer.cpp trunk/otlkcon0/mstore/O_IFolder.cpp trunk/otlkcon0/mstore/O_IMessage.cpp trunk/otlkcon0/mstore/O_IMsgStore.cpp trunk/otlkcon0/mstore/O_IMsgStore.h trunk/otlkcon0/mstore/O_IXPLogon.cpp trunk/otlkcon0/mstore/O_IXPProvider.cpp trunk/otlkcon0/mstore/mstore.cpp trunk/otlkcon0/mstore/otlkcon_generic_msgstore.cpp trunk/otlkcon0/otlkcon_entryid.h trunk/otlkcon0/otlkcon_event.cpp trunk/otlkcon0/otlkcon_gui.cpp trunk/otlkcon0/protocols/caldav/caldav.cpp Modified: trunk/otlkcon0/mstore/O_IAttach.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IAttach.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IAttach.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -50,6 +50,7 @@ entryID->typeID = MAPI_ATTACH; entryID->supportedInterfaces |= OTLKCON_IATTACHMENT_CLASS; + entryID->primarySupportedInterface = OTLKCON_IATTACHMENT_CLASS; entryID->storeInstanceGuid = msgstore->entryID->storeInstanceGuid; parent = par->entryID; @@ -286,6 +287,7 @@ { eid->typeID = MAPI_ATTACH; eid->supportedInterfaces |= OTLKCON_IATTACHMENT_CLASS; + eid->primarySupportedInterface = OTLKCON_IATTACHMENT_CLASS; } // if } // if return hResult; Modified: trunk/otlkcon0/mstore/O_IContainer.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IContainer.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IContainer.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -697,7 +697,7 @@ = (wchar_t *)memObj->pMalloc( (strlen(idStrA)+1)*sizeof(wchar_t) ); swprintf_s(idStrW, strlen(idStrA)+1, L"%S", idStrA); - dataSize = (wcslen(idStrW)+wcslen(iCalStr)+2)*sizeof(wchar_t)+sizeof(ULONG); + dataSize = (ULONG)(wcslen(idStrW)+wcslen(iCalStr)+2)*sizeof(wchar_t)+sizeof(ULONG); ev = (otlkcon_event_struct *)memObj->pMalloc( sizeof(otlkcon_event_struct) + dataSize ); memcpy(&(ev->senderEntryID), entryID, sizeof(O_ENTRYID)); @@ -891,7 +891,8 @@ for(map< O_ENTRYID *, void *, otlkcon_entryid_less >::iterator i=otlkcon_event_objects.begin(); i != otlkcon_event_objects.end(); ++i) { - if( (*i).first->typeID != MAPI_PROFSECT ) + if( (*i).first->primarySupportedInterface + != OTLKCON_IXPPROVIDER_CLASS ) { continue; } @@ -951,7 +952,7 @@ return E_FAIL; } - dataSize = (strlen(idStrA)+1)*sizeof(wchar_t); + dataSize = (ULONG)(strlen(idStrA)+1)*sizeof(wchar_t); wchar_t *idStrW = (wchar_t *)memObj->pMalloc( dataSize ); swprintf_s(idStrW, strlen(idStrA)+1, L"%S", idStrA); @@ -1058,10 +1059,10 @@ } wchar_t *idStrW - = (wchar_t *)memObj->pMalloc( (strlen(idStrA)+1)*sizeof(wchar_t) ); + = (wchar_t *)memObj->pMalloc( (ULONG)(strlen(idStrA)+1)*sizeof(wchar_t) ); swprintf_s(idStrW, strlen(idStrA)+1, L"%S", idStrA); - dataSize = (wcslen(idStrW)+1)*sizeof(wchar_t); + dataSize = (ULONG)(wcslen(idStrW)+1)*sizeof(wchar_t); ev = (otlkcon_event_struct *)memObj->pMalloc( sizeof(otlkcon_event_struct) + dataSize ); memcpy(&(ev->senderEntryID), entryID, sizeof(O_ENTRYID)); Modified: trunk/otlkcon0/mstore/O_IFolder.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IFolder.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IFolder.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -100,6 +100,7 @@ //PR_ENTRYID entryID->typeID = MAPI_FOLDER; + entryID->primarySupportedInterface = OTLKCON_IMAPIFOLDER_CLASS; defaultProps[propCount].ulPropTag = PR_ENTRYID; defaultProps[propCount].Value.bin.lpb = (LPBYTE)entryID; Modified: trunk/otlkcon0/mstore/O_IMessage.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMessage.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IMessage.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -101,6 +101,7 @@ entryID->typeID = MAPI_MESSAGE; entryID->supportedInterfaces |= OTLKCON_IMESSAGE_CLASS; + entryID->primarySupportedInterface = OTLKCON_IMESSAGE_CLASS; entryID->storeInstanceGuid = msgstore->entryID->storeInstanceGuid; if( par ) Modified: trunk/otlkcon0/mstore/O_IMsgStore.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IMsgStore.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -30,6 +30,11 @@ extern HWND otlkcon_eventHwnd; +O_IMSPMsgStore::O_IMSPMsgStore() +{ + className = _strdup("O_IMSPMsgStore"); +} + HRESULT O_IMSPMsgStore::Create(char * df, MAPIUID ig, otlkcon_memory *m ) { HRESULT result = S_OK; @@ -56,6 +61,8 @@ return result; } + entryID->primarySupportedInterface = OTLKCON_IMSPMSGSTORE_CLASS; + rootFolder = topLevelFolders["ROOT_FOLDER"]; //PR_ENTRYID @@ -748,6 +755,8 @@ string tmpId3 = (*i).first.c_str(); tmpEid.instanceGuid = tmpUid; + tmpEid.primarySupportedInterface = OTLKCON_IMAPIFOLDER_CLASS; + tmpEid.typeID = MAPI_FOLDER; result = OpenEntry(sizeof(O_ENTRYID), (LPENTRYID)&tmpEid, NULL, 0, &objType, (LPUNKNOWN *)&tmpFld ); Modified: trunk/otlkcon0/mstore/O_IMsgStore.h =================================================================== --- trunk/otlkcon0/mstore/O_IMsgStore.h 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IMsgStore.h 2006-09-30 20:39:10 UTC (rev 486) @@ -27,6 +27,8 @@ class O_IMSPMsgStore : public otlkcon_generic_msgstore { public: + O_IMSPMsgStore(); + HRESULT Create(char * df, MAPIUID ig, otlkcon_memory *m ); HRESULT Destroy(); HRESULT Load(char *df, O_ENTRYID *eid, otlkcon_memory *m ); Modified: trunk/otlkcon0/mstore/O_IXPLogon.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IXPLogon.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IXPLogon.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -464,7 +464,8 @@ result = O_IProp::NewMAPIUID( &(entryID->instanceGuid) ); entryID->typeGuid = otlkcon_account_details_guid; // INFO: Use session type for accounts - entryID->typeID = MAPI_SESSION; + //entryID->typeID = MAPI_SESSION; + entryID->primarySupportedInterface = OTLKCON_IXPLOGONACCOUNT_CLASS; OTLKCON_ENTERCRITICALSECTION(&otlkcon_objects_cs, "O_IXPLogonAccount::O_IXPLogonAccount"); Modified: trunk/otlkcon0/mstore/O_IXPProvider.cpp =================================================================== --- trunk/otlkcon0/mstore/O_IXPProvider.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/O_IXPProvider.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -68,7 +68,8 @@ entryID = (O_ENTRYID*)memObj->malloc( sizeof(O_ENTRYID) ); result = O_IProp::NewMAPIUID( &(entryID->instanceGuid) ); entryID->typeGuid = otlkcon_xpprovider_guid ; - entryID->typeID = MAPI_PROFSECT; // FIXME: need to find a better way + //entryID->typeID = MAPI_PROFSECT; // FIXME: need to find a better way + entryID->primarySupportedInterface = OTLKCON_IXPPROVIDER_CLASS; OTLKCON_ENTERCRITICALSECTION(&otlkcon_objects_cs, "O_IXPProvider::Create"); Modified: trunk/otlkcon0/mstore/mstore.cpp =================================================================== --- trunk/otlkcon0/mstore/mstore.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/mstore.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -866,8 +866,10 @@ ++i ) { // Pass serialized id changes in the message body + // If the type is a store, or its an account. if( i->first->typeID == MAPI_STORE - || i->first->typeID == MAPI_SESSION ) + || i->first->primarySupportedInterface + == OTLKCON_IXPLOGONACCOUNT_CLASS ) { memcpy(&(event->entryID), i->first, sizeof(O_ENTRYID)); result = otlkcon_event_sendmessage( otlkcon_eventHwnd, @@ -1149,11 +1151,17 @@ O_ENTRYID* lpStoreEntryID = NULL; result = otlkcon_generic_msgstore::CreateStoreEntryID(&lpStoreEntryID, &memObj); - if( result != S_OK ) + if( result == S_OK ) { + // This store should be a MSP message store + lpStoreEntryID->supportedInterfaces |= OTLKCON_IMSPMSGSTORE_CLASS; + lpStoreEntryID->primarySupportedInterface = OTLKCON_IMSPMSGSTORE_CLASS; + } + else + { OTLKCON_DEBUGBREAK; } - + tempProps[ulProps].ulPropTag = PR_RECORD_KEY; tempProps[ulProps].Value.bin.lpb = (LPBYTE)&lpStoreEntryID->storeInstanceGuid;//(LPBYTE)(profRecordKey?profRecordKey:&(msgstore->entryID->storeInstanceGuid)); tempProps[ulProps++].Value.bin.cb = sizeof(MAPIUID); Modified: trunk/otlkcon0/mstore/otlkcon_generic_msgstore.cpp =================================================================== --- trunk/otlkcon0/mstore/otlkcon_generic_msgstore.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/mstore/otlkcon_generic_msgstore.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -208,6 +208,7 @@ free(str1);*/ entryID->typeID = MAPI_STORE; + entryID->primarySupportedInterface = OTLKCON_IMSGSTORE_CLASS; entryID->supportedInterfaces |= OTLKCON_IMSGSTORE_CLASS; prop2str = new otlkcon_prop2str(memObj->lpAllocateBuffer, memObj->lpFreeBuffer); @@ -220,6 +221,7 @@ leid.instanceGuid = entryID->instanceGuid; leid.typeGuid = otlkcon_imapifolder_guid; leid.typeID = MAPI_FOLDER; + leid.primarySupportedInterface = OTLKCON_IMAPIFOLDER_CLASS; result = rootFolder->Create( this, entryID->instanceGuid, "Root Folder", NULL ); if( result == S_OK ) @@ -235,6 +237,7 @@ leid.instanceGuid = entryID->instanceGuid; leid.typeGuid = otlkcon_imapifolder_guid; leid.typeID = MAPI_FOLDER; + leid.primarySupportedInterface = OTLKCON_IMAPIFOLDER_CLASS; result = rootFolder->Load( this, &leid ); if( result != S_OK ) { @@ -301,6 +304,7 @@ leid.instanceGuid = entryID->instanceGuid; leid.typeGuid = otlkcon_imapifolder_guid; leid.typeID = MAPI_FOLDER; + leid.primarySupportedInterface = OTLKCON_IMAPIFOLDER_CLASS; O_IFolder *rootFolder = new O_IFolder(); result = rootFolder->Load( this, &leid ); @@ -869,6 +873,7 @@ if(SUCCEEDED(hResult)) { (*lppNewEntry)->typeID = MAPI_STORE; + (*lppNewEntry)->primarySupportedInterface = OTLKCON_IMSGSTORE_CLASS; (*lppNewEntry)->supportedInterfaces |= OTLKCON_IMSGSTORE_CLASS; } // if else @@ -898,6 +903,11 @@ return E_FAIL; } + if( eid->typeID == 0 || eid->primarySupportedInterface == 0 ) + { + return E_FAIL; + } + if( flags == 0 || flags & OTLKCON_ENTRYID_VALIDATE_SIZE ) { // Sanity check. Correct size? Modified: trunk/otlkcon0/otlkcon_entryid.h =================================================================== --- trunk/otlkcon0/otlkcon_entryid.h 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/otlkcon_entryid.h 2006-09-30 20:39:10 UTC (rev 486) @@ -57,6 +57,9 @@ //! Types as defined internally int supportedInterfaces; + //! Types as defined internally + int primarySupportedInterface; + //! Long-term or short-term short entryIDType; @@ -90,7 +93,13 @@ #define OTLKCON_IMAPITABLE_CLASS 32 #define OTLKCON_IMESSAGE_CLASS 64 #define OTLKCON_IMSLOGON_CLASS 128 -#define OTLKCON_IATTACHMENT_CLASS 256 +#define OTLKCON_IATTACHMENT_CLASS 256 +#define OTLKCON_IXPLOGON_CLASS 512 +#define OTLKCON_IXPLOGONACCOUNT_CLASS 1024 +#define OTLKCON_IXPPROVIDER_CLASS 2048 +#define OTLKCON_IABPMSGSTORE_CLASS 4096 +#define OTLKCON_IXPPMSGSTORE_CLASS 8192 +#define OTLKCON_IMSPMSGSTORE_CLASS 16384 #define OTLKCON_ENTRYID_VALIDATE_SIZE 1 #define OTLKCON_ENTRYID_VALIDATE_EXISTS 2 Modified: trunk/otlkcon0/otlkcon_event.cpp =================================================================== --- trunk/otlkcon0/otlkcon_event.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/otlkcon_event.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -164,6 +164,7 @@ { DWORD result = S_OK; otlkcon_generic_msgstore *tmpStore; + O_IMSPMsgStore *tmpMSPStore; O_IXPLogonAccount *tmpLogonAccnt; O_IXPProvider *tmpXPP; O_IContainer *tmpCon; @@ -172,26 +173,29 @@ result = MAPIInitialize(NULL); - switch( event->entryID.typeID ) + switch( event->entryID.primarySupportedInterface ) { - case MAPI_STORE: + case OTLKCON_IMSPMSGSTORE_CLASS: + tmpMSPStore = (O_IMSPMsgStore *)(procEvent->obj); + result = tmpMSPStore->ProcessEvent( event ); + break; + + case OTLKCON_IMSGSTORE_CLASS: tmpStore = (otlkcon_generic_msgstore *)(procEvent->obj); result = tmpStore->ProcessEvent( event ); break; - case MAPI_SESSION: - // INFO: Use session type for accounts + case OTLKCON_IXPLOGONACCOUNT_CLASS: tmpLogonAccnt = (O_IXPLogonAccount *)(procEvent->obj); result = tmpLogonAccnt->ProcessEvent( event ); break; - case MAPI_PROFSECT: - // INFO: Use profsect type for transport providers + case OTLKCON_IXPPROVIDER_CLASS: tmpXPP = (O_IXPProvider *)(procEvent->obj); result = tmpXPP->ProcessEvent( event ); break; - case MAPI_FOLDER: + case OTLKCON_IMAPIFOLDER_CLASS: tmpCon = (O_IContainer *)(procEvent->obj); result = tmpCon->ProcessEvent( event ); break; @@ -242,9 +246,19 @@ DispatchMessage(&msg); } - UnregisterClass(OTLKCON_EVENT_WINDOW_CLASSNAME, wclass.hInstance); + try + { + // FIXME: Why is this error being thrown? + UnregisterClass(OTLKCON_EVENT_WINDOW_CLASSNAME, + GetModuleHandleW(OTLKCON_MSTORE_DLL_NAME)); + } + catch( void * ) + { + OTLKCON_DEBUGBREAK; + } // MAPIUninitialize(); +//event_end: return result; } Modified: trunk/otlkcon0/otlkcon_gui.cpp =================================================================== --- trunk/otlkcon0/otlkcon_gui.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/otlkcon_gui.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -98,8 +98,9 @@ szBufSize = 4; result = RegSetValueExW(hk, L"logToFileEnabled", 0, REG_DWORD, (BYTE *)&dwBuf, szBufSize); - wcsncpy( szBuf, debugLogFilename.c_str(), OTLKCON_REG_VALUE_MAX_LEN); - szBufSize = (wcslen( szBuf )+1)*sizeof(wchar_t); + wcsncpy_s( szBuf, OTLKCON_REG_VALUE_MAX_LEN+1, + debugLogFilename.c_str(), OTLKCON_REG_VALUE_MAX_LEN); + szBufSize = (ULONG)(wcslen( szBuf )+1)*sizeof(wchar_t); result = RegSetValueExW(hk, L"logFile", 0, REG_SZ, (BYTE *)szBuf, szBufSize); } @@ -259,7 +260,7 @@ if( sheet ) { conf = (otlkcon_config *)sheet->lParam; - tmpFilename = wcsdup( conf->dbFilename.c_str() ); + tmpFilename = _wcsdup( conf->dbFilename.c_str() ); tmpXPEnable = conf->xpEnabled; tmpABEnable = conf->abEnabled; } @@ -377,9 +378,8 @@ openFileName.lStructSize = sizeof (OPENFILENAMEW); openFileName.hwndOwner = conf->ulUIParam; - // FIXME: Sometimes 'sheet' is an invalid pointer - // Seems like memory curruption somewhere. - openFileName.hInstance = sheet->hInstance; + openFileName.hInstance + = GetModuleHandleW(OTLKCON_MSTORE_DLL_NAME);; openFileName.Flags = OFN_CREATEPROMPT |OFN_LONGNAMES|OFN_NOREADONLYRETURN; openFileName.lpstrDefExt = OTLKCON_DEFAULT_FILE_EXT; @@ -439,8 +439,8 @@ if( sheet ) { conf = (otlkcon_config *)sheet->lParam; - tmpFilename = wcsdup( conf->debugLogFilename.c_str() ); - swprintf(tmpDebugLevel, L"%d", conf->debugLevel ); + tmpFilename = _wcsdup( conf->debugLogFilename.c_str() ); + swprintf_s(tmpDebugLevel, 32, L"%d", conf->debugLevel ); } SetWindowLong(hwnd, GWL_USERDATA, (LONG)conf); @@ -588,8 +588,8 @@ int index; acctTypeName = conf->accTypeList[ acct->type ].c_str(); - index = SendDlgItemMessageW( hwnd, IDC_ACCOUNT_TYPE_COMBO, CB_FINDSTRINGEXACT, (WPARAM)-1, - (LPARAM)acctTypeName ); + index = SendDlgItemMessageW( hwnd, IDC_ACCOUNT_TYPE_COMBO, CB_FINDSTRINGEXACT, + (WPARAM)-1, (LPARAM)acctTypeName ); if( index == CB_ERR ) { index = 0; @@ -966,7 +966,7 @@ for(int j=1; j<OTLKCON_ACCOUNT_MAX+2; j++) { tempAcc->id = OTLKCON_ACCOUNT_DEFAULT_ID; - _itow(j, strBuff, 10 ); + _itow_s(j, strBuff, 32, 10 ); tempAcc->id += strBuff; index = SendDlgItemMessageW( hwnd, IDC_ACCOUNT_COMBO, CB_FINDSTRINGEXACT, (WPARAM)-1, Modified: trunk/otlkcon0/protocols/caldav/caldav.cpp =================================================================== --- trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-09-29 05:56:49 UTC (rev 485) +++ trunk/otlkcon0/protocols/caldav/caldav.cpp 2006-09-30 20:39:10 UTC (rev 486) @@ -741,9 +741,8 @@ { HRESULT result = S_OK; boost::wregex nameReg( L"^[a-zA-Z0-9!()',*$%.+_-]{1,}$"); - wstring str = name.c_str(); - if( boost::regex_match(str, nameReg ) ) + if( boost::regex_match(name, nameReg ) ) { result = S_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |