diff --git a/Demos/Authorization/FMXClientAuthorization.dproj b/Demos/Authorization/FMXClientAuthorization.dproj
index 3b2ed514..083c4ef7 100644
--- a/Demos/Authorization/FMXClientAuthorization.dproj
+++ b/Demos/Authorization/FMXClientAuthorization.dproj
@@ -1,7 +1,7 @@
{0546214C-5B2E-4AE6-B696-DEF7BF88EC13}
- 18.4
+ 18.5
FMX
FMXClientAuthorization.dpr
True
@@ -159,7 +159,7 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
@@ -203,7 +203,7 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
@@ -244,7 +244,7 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
@@ -255,7 +255,7 @@
Debug
DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
true
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user
$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
@@ -292,13 +292,13 @@
1033
true
true
- true
false
+ PerMonitor
Debug
true
- true
+ PerMonitor
false
@@ -308,11 +308,11 @@
true
- true
+ PerMonitor
true
- true
+ PerMonitor
@@ -353,12 +353,22 @@
true
+
+
+ true
+
+
+
+
+ true
+
+
true
-
+
true
@@ -383,7 +393,6 @@
1
- Contents\MacOS
0
@@ -393,6 +402,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -430,6 +445,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -508,6 +529,11 @@
1
.framework
+
+ Contents\MacOS
+ 1
+ .framework
+
0
@@ -530,6 +556,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -553,6 +584,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
@@ -575,6 +611,10 @@
Contents\Resources\StartUp\
0
+
+ Contents\Resources\StartUp\
+ 0
+
0
@@ -711,23 +751,41 @@
1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
..\
1
+
+ ..\
+ 1
+
Contents
1
+
+ Contents
+ 1
+
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -750,6 +808,10 @@
Contents\MacOS
1
+
+ Contents\MacOS
+ 1
+
0
@@ -789,6 +851,7 @@
+
diff --git a/Demos/Authorization/MARSAuthorization.dproj b/Demos/Authorization/MARSAuthorization.dproj
index 4e76524a..edc60c8d 100755
--- a/Demos/Authorization/MARSAuthorization.dproj
+++ b/Demos/Authorization/MARSAuthorization.dproj
@@ -7,7 +7,7 @@
Application
VCL
DCC32
- 18.4
+ 18.5
Win32
1
@@ -51,7 +51,7 @@
CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
1033
true
- Web;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Soap;Winapi;$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace)
+ Web;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Soap;Winapi;$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace);$(DCC_NameSpace)
false
00400000
false
@@ -83,8 +83,8 @@
0
- true
true
+ PerMonitor
DEBUG;$(DCC_Define)
@@ -93,8 +93,8 @@
Debug
- true
true
+ PerMonitor
diff --git a/Demos/Authorization/Server.Forms.Main.pas b/Demos/Authorization/Server.Forms.Main.pas
index b393ec1e..c2978c43 100755
--- a/Demos/Authorization/Server.Forms.Main.pas
+++ b/Demos/Authorization/Server.Forms.Main.pas
@@ -67,7 +67,7 @@ implementation
, MARS.Core.URL
, MARS.Core.MessageBodyWriter, MARS.Core.MessageBodyWriters
, MARS.Core.MessageBodyReader, MARS.Core.MessageBodyReaders
- , MARS.Utils.Parameters.IniFile
+ , MARS.Utils.Parameters.IniFile, MARS.Core.RequestAndResponse.Interfaces
;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
@@ -86,10 +86,9 @@ procedure TMainForm.FormCreate(Sender: TObject);
// skip favicon requests (browser)
FEngine.BeforeHandleRequest :=
- function (const AEngine: TMARSEngine; const AURL: TMARSURL;
- const ARequest: TWebRequest; const AResponse: TWebResponse;
- var Handled: Boolean
- ): Boolean
+ function(const AEngine: TMARSEngine;
+ const AURL: TMARSURL; const ARequest: IMARSRequest; const AResponse: IMARSResponse;
+ var Handled: Boolean): Boolean
begin
Result := True;
if SameText(AURL.Document, 'favicon.ico') then
diff --git a/Demos/ContentTypes/Server.Resources.pas b/Demos/ContentTypes/Server.Resources.pas
index 3181aad1..1b6dea09 100755
--- a/Demos/ContentTypes/Server.Resources.pas
+++ b/Demos/ContentTypes/Server.Resources.pas
@@ -77,10 +77,7 @@ THelloWorldResource = class
function DataSet1: TDataSet;
{$ifdef DelphiXE3_UP}
- [GET, Path('/dataset2'),
-// , Produces(TMediaType.APPLICATION_XML)
-// , Produces(TMediaType.APPLICATION_JSON)
-]
+ [GET, Path('/dataset2')]
function DataSet2: TFDMemTable;
[GET, Path('/dataset3')
diff --git a/Demos/JsonDataObjects/JsonDataObjectsApacheModule.dproj b/Demos/JsonDataObjects/JsonDataObjectsApacheModule.dproj
index 88a550c3..dc246b71 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsApacheModule.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsApacheModule.dproj
@@ -1,7 +1,7 @@
{9F324623-DE30-4882-85B1-E43C2F9E0A9F}
- 18.4
+ 18.5
VCL
JsonDataObjectsApacheModule.dpr
True
@@ -134,7 +134,6 @@
1
- Contents\MacOS
0
@@ -144,6 +143,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -180,6 +185,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -256,6 +267,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -265,6 +280,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -287,6 +306,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -308,6 +331,9 @@
0
+
+ 0
+
0
@@ -418,6 +444,7 @@
1
+
@@ -425,6 +452,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -446,6 +477,9 @@
1
+
+ 1
+
0
@@ -485,6 +519,7 @@
+
diff --git a/Demos/JsonDataObjects/JsonDataObjectsConsole.dproj b/Demos/JsonDataObjects/JsonDataObjectsConsole.dproj
index 297c0b8b..15bcddc4 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsConsole.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsConsole.dproj
@@ -1,7 +1,7 @@
{3989725D-F9E4-4178-9FBC-93DC284F63C7}
- 18.4
+ 18.5
VCL
JsonDataObjectsConsole.dpr
True
@@ -130,7 +130,6 @@
1
- Contents\MacOS
0
@@ -140,6 +139,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -176,6 +181,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -252,6 +263,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -261,6 +276,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -283,6 +302,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -304,6 +327,9 @@
0
+
+ 0
+
0
@@ -414,6 +440,7 @@
1
+
@@ -421,6 +448,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -442,6 +473,9 @@
1
+
+ 1
+
0
@@ -481,6 +515,7 @@
+
diff --git a/Demos/JsonDataObjects/JsonDataObjectsFMX.dproj b/Demos/JsonDataObjects/JsonDataObjectsFMX.dproj
index 235803dd..f7817217 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsFMX.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsFMX.dproj
@@ -1,7 +1,7 @@
{E0F4FA79-1B8C-437A-AB05-73EF7AD349A8}
- 18.4
+ 18.5
FMX
JsonDataObjectsFMX.dpr
True
@@ -145,7 +145,7 @@
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
iPhoneAndiPad
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
@@ -189,7 +189,7 @@
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
iPhoneAndiPad
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
@@ -238,7 +238,7 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png
@@ -260,7 +260,7 @@
/usr/X11/bin/xterm -e "%debuggee%"
DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
true
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user
Debug
@@ -301,12 +301,12 @@
true
1033
true
- true
false
+ PerMonitor
true
- true
+ PerMonitor
false
@@ -316,11 +316,11 @@
true
- true
+ PerMonitor
true
- true
+ PerMonitor
@@ -365,15 +365,9 @@
true
-
-
- true
-
-
-
-
- Assets\
- Logo150x150.png
+
+
+ JsonDataObjectsFMX.exe
true
@@ -382,25 +376,27 @@
true
-
-
- JsonDataObjectsFMX.exe
+
+
+ JsonDataObjectsFMX.icns
true
-
+
true
-
-
+
+
+ Info.plist
true
-
+
- JsonDataObjectsFMX.icns
+ Assets\
+ Logo150x150.png
true
@@ -410,17 +406,31 @@
true
-
+
- Info.plist
true
-
+
+
+ true
+
+
+
true
+
+
+ true
+
+
+
+
+ true
+
+
Contents\MacOS\
@@ -437,7 +447,6 @@
1
- Contents\MacOS
0
@@ -447,6 +456,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -483,6 +498,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -561,6 +582,11 @@
1
.framework
+
+ Contents\MacOS
+ 1
+ .framework
+
0
@@ -583,6 +609,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -606,6 +637,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
@@ -628,6 +664,10 @@
Contents\Resources\StartUp\
0
+
+ Contents\Resources\StartUp\
+ 0
+
0
@@ -764,23 +804,41 @@
1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
..\
1
+
+ ..\
+ 1
+
Contents
1
+
+ Contents
+ 1
+
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -803,6 +861,10 @@
Contents\MacOS
1
+
+ Contents\MacOS
+ 1
+
0
@@ -842,6 +904,7 @@
+
diff --git a/Demos/JsonDataObjects/JsonDataObjectsISAPI.dproj b/Demos/JsonDataObjects/JsonDataObjectsISAPI.dproj
index f695c824..1b275ffd 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsISAPI.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsISAPI.dproj
@@ -1,7 +1,7 @@
{7F50F5E9-ED2D-4A28-9C9E-10FAA1B36C4D}
- 18.4
+ 18.5
VCL
JsonDataObjectsISAPI.dpr
True
@@ -134,7 +134,6 @@
1
- Contents\MacOS
0
@@ -144,6 +143,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -180,6 +185,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -256,6 +267,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -265,6 +280,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -287,6 +306,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -308,6 +331,9 @@
0
+
+ 0
+
0
@@ -418,6 +444,7 @@
1
+
@@ -425,6 +452,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -446,6 +477,9 @@
1
+
+ 1
+
0
@@ -485,6 +519,7 @@
+
diff --git a/Demos/JsonDataObjects/JsonDataObjectsVCL.dproj b/Demos/JsonDataObjects/JsonDataObjectsVCL.dproj
index 01c56804..77c18856 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsVCL.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsVCL.dproj
@@ -7,7 +7,7 @@
Application
VCL
DCC32
- 18.4
+ 18.5
1
Win32
@@ -168,7 +168,6 @@
1
- Contents\MacOS
0
@@ -178,6 +177,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -214,6 +219,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -290,6 +301,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -299,6 +314,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -321,6 +340,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -342,6 +365,9 @@
0
+
+ 0
+
0
@@ -452,6 +478,7 @@
1
+
@@ -459,6 +486,10 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -480,6 +511,9 @@
1
+
+ 1
+
0
@@ -519,6 +553,7 @@
+
diff --git a/Demos/JsonDataObjects/JsonDataObjectsVCL.res b/Demos/JsonDataObjects/JsonDataObjectsVCL.res
index da24bfd7..aff75aeb 100644
Binary files a/Demos/JsonDataObjects/JsonDataObjectsVCL.res and b/Demos/JsonDataObjects/JsonDataObjectsVCL.res differ
diff --git a/Demos/JsonDataObjects/JsonDataObjectsWinSvc.dproj b/Demos/JsonDataObjects/JsonDataObjectsWinSvc.dproj
index a80b91d8..c84b3c58 100644
--- a/Demos/JsonDataObjects/JsonDataObjectsWinSvc.dproj
+++ b/Demos/JsonDataObjects/JsonDataObjectsWinSvc.dproj
@@ -1,7 +1,7 @@
{F72901B8-3DC2-48DB-9F80-EE7BA471758C}
- 18.4
+ 18.5
VCL
JsonDataObjectsWinSvc.dpr
True
@@ -82,10 +82,10 @@
true
- true
1033
true
false
+ PerMonitor
false
@@ -94,8 +94,8 @@
0
- true
true
+ PerMonitor
@@ -154,7 +154,6 @@
1
- Contents\MacOS
0
@@ -164,6 +163,12 @@
1
+
+
+ res\xml
+ 1
+
+
library\lib\armeabi-v7a
@@ -200,6 +205,12 @@
1
+
+
+ res\values-v21
+ 1
+
+
res\drawable
@@ -278,6 +289,11 @@
1
.framework
+
+ Contents\MacOS
+ 1
+ .framework
+
0
@@ -300,6 +316,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -323,6 +344,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
@@ -345,6 +371,10 @@
Contents\Resources\StartUp\
0
+
+ Contents\Resources\StartUp\
+ 0
+
0
@@ -481,23 +511,41 @@
1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
..\
1
+
+ ..\
+ 1
+
Contents
1
+
+ Contents
+ 1
+
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
@@ -520,6 +568,10 @@
Contents\MacOS
1
+
+ Contents\MacOS
+ 1
+
0
@@ -559,6 +611,7 @@
+
diff --git a/Demos/JsonDataObjects/Server.Resources.pas b/Demos/JsonDataObjects/Server.Resources.pas
index 031a7b6d..ad0a2eda 100644
--- a/Demos/JsonDataObjects/Server.Resources.pas
+++ b/Demos/JsonDataObjects/Server.Resources.pas
@@ -10,15 +10,14 @@ interface
uses
SysUtils, Classes
- , MARS.Core.Attributes
- , MARS.Core.MediaType
- , MARS.Core.Response
+, MARS.Core.Attributes
+, MARS.Core.MediaType
+, MARS.Core.Response
- , MARS.Core.Token.Resource
+, MARS.Core.Token.Resource
- , JsonDataObjects
- , MARS.JsonDataObjects.ReadersAndWriters
- ;
+, JsonDataObjects, MARS.JsonDataObjects.ReadersAndWriters
+;
type
[Path('helloworld')]
diff --git a/Demos/MARSTemplate/MARSTemplateClient.dproj b/Demos/MARSTemplate/MARSTemplateClient.dproj
index 583fbb0b..252a6005 100755
--- a/Demos/MARSTemplate/MARSTemplateClient.dproj
+++ b/Demos/MARSTemplate/MARSTemplateClient.dproj
@@ -4,10 +4,10 @@
MARSTemplateClient.dpr
True
Debug
- 1169
+ 33809
Application
FMX
- 18.5
+ 19.0
Win32
@@ -18,8 +18,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -33,13 +33,8 @@
Base
true
-
- true
- Base
- true
-
-
- true
+
+ true
Base
true
@@ -69,12 +64,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
true
Cfg_2
@@ -87,8 +76,8 @@
true
true
-
- true
+
+ true
Cfg_2
true
true
@@ -140,32 +129,40 @@
true
android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
-
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
- iPhoneAndiPad
- true
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
Debug
- $(MSBuildProjectName)
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
@@ -175,6 +172,26 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
@@ -199,13 +216,28 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
-
- /usr/bin/xterm -e "%debuggee%"
- (None)
-
-
- $(BDS)\bin\delphi_PROJECTICNS.icns
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ true
+ Base
+ true
Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
@@ -240,17 +272,17 @@
false
true
-
- true
-
Debug
true
-
- $(BDS)\bin\delphi_PROJECTICNS.icns
+
+ true
+ true
+ Cfg_2
+ true
true
@@ -298,11 +330,10 @@
True
- False
+ True
True
False
- True
- False
+ False
True
False
@@ -336,11 +367,22 @@
true
+
+
+ true
+
+
true
+
+
+ splash_image.png
+ true
+
+
splash_image.png
@@ -364,17 +406,6 @@
true
-
-
- splash_image.png
- true
-
-
-
-
- true
-
-
true
@@ -452,12 +483,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -470,96 +509,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -648,6 +833,9 @@
0
+
+ 0
+
0
@@ -680,6 +868,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -691,6 +890,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -702,6 +934,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -713,6 +1010,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -724,6 +1151,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -746,10 +1183,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -790,6 +1272,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
1
@@ -842,6 +1334,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -866,6 +1362,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -903,6 +1405,7 @@
+
12
diff --git a/Demos/MARSTemplate/MARSTemplateServerApacheModule.dproj b/Demos/MARSTemplate/MARSTemplateServerApacheModule.dproj
index a0905e5f..13717a78 100644
--- a/Demos/MARSTemplate/MARSTemplateServerApacheModule.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerApacheModule.dproj
@@ -1,7 +1,7 @@
{0D982E91-6C92-4321-9078-458448B01536}
- 18.5
+ 19.0
None
MARSTemplateServerApacheModule.dpr
True
@@ -189,12 +189,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -207,96 +215,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -366,6 +520,9 @@
0
+
+ 0
+
0
@@ -396,6 +553,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -407,6 +575,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -418,6 +619,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -429,6 +695,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -440,6 +836,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -462,10 +868,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -480,6 +931,7 @@
+
1
@@ -509,6 +961,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -531,6 +987,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -568,6 +1030,7 @@
+
True
diff --git a/Demos/MARSTemplate/MARSTemplateServerApplication.dproj b/Demos/MARSTemplate/MARSTemplateServerApplication.dproj
index 4e051b4d..c9ef6f5b 100644
--- a/Demos/MARSTemplate/MARSTemplateServerApplication.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerApplication.dproj
@@ -7,7 +7,7 @@
3
Application
VCL
- 18.5
+ 19.0
Win32
diff --git a/Demos/MARSTemplate/MARSTemplateServerConsoleApplication.dproj b/Demos/MARSTemplate/MARSTemplateServerConsoleApplication.dproj
index 4903d93a..33380dbd 100644
--- a/Demos/MARSTemplate/MARSTemplateServerConsoleApplication.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerConsoleApplication.dproj
@@ -4,10 +4,10 @@
MARSTemplateServerConsoleApplication.dpr
True
Release
- 133
+ 4225
Console
None
- 18.5
+ 19.0
Win32
@@ -18,8 +18,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -33,8 +33,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -70,12 +70,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
true
Cfg_2
@@ -94,8 +88,8 @@
true
true
-
- true
+
+ true
Cfg_2
true
true
@@ -145,25 +139,38 @@
true
true
android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
-
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
- iPhoneAndiPad
- true
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
Debug
- $(MSBuildProjectName)
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
@@ -187,9 +194,12 @@
(None)
MARSTemplateServer_Icon.ico
-
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
Debug
+ true
+ Base
+ true
/usr/X11/bin/xterm -e "%debuggee%"
(None)
@@ -224,9 +234,6 @@
false
true
-
- true
-
Debug
@@ -236,8 +243,11 @@
MARSTemplateServer_Icon.ico
-
+
true
+ true
+ Cfg_2
+ true
1033
@@ -283,11 +293,11 @@
False
- False
+ False
False
False
True
- True
+ True
True
False
@@ -355,12 +365,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -373,96 +391,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -532,6 +696,9 @@
0
+
+ 0
+
0
@@ -562,6 +729,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -573,6 +751,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -584,6 +795,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -595,6 +871,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -606,6 +1012,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -628,10 +1044,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -646,6 +1107,7 @@
+
1
@@ -675,6 +1137,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -697,6 +1163,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -734,6 +1206,7 @@
+
12
diff --git a/Demos/MARSTemplate/MARSTemplateServerDaemon.dproj b/Demos/MARSTemplate/MARSTemplateServerDaemon.dproj
index 27e6a8a7..522b0dba 100644
--- a/Demos/MARSTemplate/MARSTemplateServerDaemon.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerDaemon.dproj
@@ -1,7 +1,7 @@
{9D225C2C-24C2-48B4-8ABE-52C04AF576AE}
- 18.5
+ 19.0
None
MARSTemplateServerDaemon.dpr
True
@@ -18,8 +18,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -38,8 +38,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -99,9 +99,29 @@
$(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
$(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
-
- DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage);$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
@@ -115,8 +135,13 @@
MARSTemplateServer_Icon.ico
(None)
-
- DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage);$(DCC_UsePackage)
true
@@ -244,12 +269,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -262,96 +295,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -440,6 +619,9 @@
0
+
+ 0
+
0
@@ -472,6 +654,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -483,6 +676,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -494,6 +720,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -505,6 +796,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -516,6 +937,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -538,10 +969,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -582,6 +1058,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
1
@@ -634,6 +1120,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -658,6 +1148,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -695,14 +1191,15 @@
+
False
- False
+ False
False
False
True
- False
+ False
False
False
diff --git a/Demos/MARSTemplate/MARSTemplateServerFMXApplication.dproj b/Demos/MARSTemplate/MARSTemplateServerFMXApplication.dproj
index f603e0be..5de257d5 100644
--- a/Demos/MARSTemplate/MARSTemplateServerFMXApplication.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerFMXApplication.dproj
@@ -4,10 +4,10 @@
MARSTemplateServerFMXApplication.dpr
True
Release
- 1173
+ 37905
Application
FMX
- 18.5
+ 19.0
Win32
@@ -18,8 +18,8 @@
Base
true
-
- true
+
+ true
Base
true
@@ -33,13 +33,8 @@
Base
true
-
- true
- Base
- true
-
-
- true
+
+ true
Base
true
@@ -64,8 +59,8 @@
true
true
-
- true
+
+ true
Cfg_1
true
true
@@ -81,12 +76,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
true
Cfg_2
@@ -99,8 +88,8 @@
true
true
-
- true
+
+ true
Cfg_2
true
true
@@ -152,32 +141,40 @@
true
android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
-
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
- iPhoneAndiPad
- true
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
Debug
- $(MSBuildProjectName)
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
- $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
- $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
@@ -187,6 +184,26 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
@@ -211,16 +228,28 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
-
- /usr/bin/xterm -e "%debuggee%"
- (None)
- MARSTemplateServer_Icon.ico
-
-
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
Debug
true
+ true
+ Base
+ true
/usr/X11/bin/xterm -e "%debuggee%"
(None)
MARSTemplateServer_Icon.ico
@@ -253,9 +282,12 @@
Debug
-
+
+ true
+ Cfg_1
+ true
true
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
true
@@ -270,18 +302,17 @@
false
true
-
- true
-
Debug
true
-
- $(BDS)\bin\delphi_PROJECTICNS.icns
+
true
+ true
+ Cfg_2
+ true
true
@@ -327,11 +358,10 @@
True
- False
+ True
True
False
- True
- True
+ True
True
False
@@ -389,12 +419,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -407,96 +445,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -585,6 +769,9 @@
0
+
+ 0
+
0
@@ -617,6 +804,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -628,6 +826,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -639,6 +870,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -650,6 +946,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -661,6 +1087,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -683,10 +1119,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -727,6 +1208,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
1
@@ -779,6 +1270,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -803,6 +1298,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -840,6 +1341,7 @@
+
12
diff --git a/Demos/MARSTemplate/MARSTemplateServerISAPI.dproj b/Demos/MARSTemplate/MARSTemplateServerISAPI.dproj
index 20690e27..25db71ca 100644
--- a/Demos/MARSTemplate/MARSTemplateServerISAPI.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerISAPI.dproj
@@ -7,7 +7,7 @@
1
Library
None
- 18.5
+ 19.0
Win32
@@ -140,7 +140,6 @@
False
False
- False
True
False
diff --git a/Demos/MARSTemplate/MARSTemplateServerService.dproj b/Demos/MARSTemplate/MARSTemplateServerService.dproj
index 3a4cfef0..590f7458 100644
--- a/Demos/MARSTemplate/MARSTemplateServerService.dproj
+++ b/Demos/MARSTemplate/MARSTemplateServerService.dproj
@@ -7,7 +7,7 @@
3
Application
None
- 18.5
+ 19.0
Win32
@@ -192,7 +192,6 @@
False
False
- False
True
True
@@ -272,12 +271,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -290,96 +297,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -468,6 +621,9 @@
0
+
+ 0
+
0
@@ -500,6 +656,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -511,6 +678,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -522,6 +722,71 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -533,6 +798,136 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -544,6 +939,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
@@ -566,10 +971,55 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
1
+
+ 1
+
@@ -610,6 +1060,16 @@
1
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
1
@@ -662,6 +1122,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -686,6 +1150,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -723,6 +1193,7 @@
+
12
diff --git a/Demos/MARSTemplate/Server.Ignition.pas b/Demos/MARSTemplate/Server.Ignition.pas
index 93fbdc6c..434b319e 100644
--- a/Demos/MARSTemplate/Server.Ignition.pas
+++ b/Demos/MARSTemplate/Server.Ignition.pas
@@ -10,9 +10,12 @@
interface
uses
- Classes, SysUtils, Rtti
- , MARS.Core.Engine
-;
+ System.Classes,
+ System.SysUtils,
+ System.RTTI,
+ System.ZLib,
+ System.StrUtils,
+ MARS.Core.Engine;
type
TServerEngine=class
@@ -94,15 +97,28 @@ implementation
*)
{$ENDREGION}
{$REGION 'Global AfterInvoke handler example'}
-(*
- // to execute something after each activation
- TMARSActivation.RegisterAfterInvoke(
- procedure (const AActivation: IMARSActivation)
- begin
-
- end
- );
-*)
+ // Compression
+ if FEngine.Parameters.ByName('Compression.Enabled').AsBoolean then
+ TMARSActivation.RegisterAfterInvoke(
+ procedure (const AActivation: IMARSActivation)
+ var
+ LOutputStream: TBytesStream;
+ begin
+ if ContainsText(AActivation.Request.GetHeaderParamValue('Accept-Encoding'), 'gzip') then
+ begin
+ LOutputStream := TBytesStream.Create(nil);
+ try
+ ZipStream(AActivation.Response.ContentStream, LOutputStream, 15 + 16);
+ AActivation.Response.ContentStream.Free;
+ AActivation.Response.ContentStream := LOutputStream;
+ AActivation.Response.ContentEncoding := 'gzip';
+ except
+ LOutputStream.Free;
+ raise;
+ end;
+ end;
+ end
+ );
{$ENDREGION}
{$REGION 'Global InvokeError handler example'}
(*
diff --git a/Demos/MARSTemplate/Server.Service.pas b/Demos/MARSTemplate/Server.Service.pas
index f3882f4d..da27291a 100644
--- a/Demos/MARSTemplate/Server.Service.pas
+++ b/Demos/MARSTemplate/Server.Service.pas
@@ -79,6 +79,9 @@ procedure TServerService.ServiceCreate(Sender: TObject);
var
LScheduler: TIdSchedulerOfThreadPool;
begin
+ Name := TServerEngine.Default.Parameters.ByNameText('ServiceName', Name).AsString;
+ DisplayName := TServerEngine.Default.Parameters.ByNameText('ServiceDisplayName', DisplayName).AsString;
+
if WebRequestHandler <> nil then
WebRequestHandler.WebModuleClass := WebModuleClass;
diff --git a/Demos/MARSTemplate/Server.WebModule.pas b/Demos/MARSTemplate/Server.WebModule.pas
index db2377d5..72908095 100644
--- a/Demos/MARSTemplate/Server.WebModule.pas
+++ b/Demos/MARSTemplate/Server.WebModule.pas
@@ -31,14 +31,15 @@ implementation
{$R *.dfm}
uses
- Server.Ignition;
+ MARS.http.Server.Indy
+, Server.Ignition;
procedure TServerWebModule.ServerWebModuleDefaultHandlerAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
inherited;
- if not TServerEngine.Default.HandleRequest(Request, Response) then
+ if not TServerEngine.Default.HandleRequest(TMARSWebRequest.Create(Request), TMARSWebResponse.Create(Response)) then
begin
Response.ContentType := 'application/json';
Response.Content :=
diff --git a/Demos/MARSTemplate/bin/MARSTemplateServerApplication.ini b/Demos/MARSTemplate/bin/MARSTemplateServerApplication.ini
index e098e5da..4398fa63 100644
--- a/Demos/MARSTemplate/bin/MARSTemplateServerApplication.ini
+++ b/Demos/MARSTemplate/bin/MARSTemplateServerApplication.ini
@@ -1,2 +1,3 @@
[DefaultEngine]
-ThreadPoolSize=100
\ No newline at end of file
+ThreadPoolSize=100
+;Compression.Enabled=True
diff --git a/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.dfm b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.dfm
new file mode 100644
index 00000000..97328db3
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.dfm
@@ -0,0 +1,25 @@
+object MainDataModule: TMainDataModule
+ OldCreateOrder = False
+ Height = 411
+ Width = 518
+ object MARSApplication: TMARSClientApplication
+ DefaultMediaType = 'application/json'
+ DefaultContentType = 'application/json'
+ Client = MARSClient
+ Left = 88
+ Top = 80
+ end
+ object MARSClient: TMARSNetClient
+ MARSEngineURL = 'http://localhost:8080/rest'
+ ConnectTimeout = 60000
+ ReadTimeout = 60000
+ HttpClient.Asynchronous = False
+ HttpClient.ConnectionTimeout = 60000
+ HttpClient.ResponseTimeout = 60000
+ HttpClient.AllowCookies = True
+ HttpClient.HandleRedirects = True
+ HttpClient.UserAgent = 'Embarcadero URI Client/1.0'
+ Left = 88
+ Top = 24
+ end
+end
diff --git a/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.pas b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.pas
new file mode 100644
index 00000000..4b24449c
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.pas
@@ -0,0 +1,32 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.DataModules.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Classes, MARS.Client.Application,
+ MARS.Client.Client, MARS.Client.Client.Net
+;
+
+type
+ TMainDataModule = class(TDataModule)
+ MARSApplication: TMARSClientApplication;
+ MARSClient: TMARSNetClient;
+ private
+ public
+ end;
+
+var
+ MainDataModule: TMainDataModule;
+
+implementation
+
+{%CLASSGROUP 'FMX.Controls.TControl'}
+
+{$R *.dfm}
+
+end.
diff --git a/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.vlb b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.vlb
new file mode 100644
index 00000000..95e7a6a2
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.DataModules.Main.vlb
@@ -0,0 +1,10 @@
+[MARSApplication]
+Coordinates=150,53,96,33
+
+[]
+Coordinates=71,70,69,33
+Visible=False
+
+[MainForm.BindSourceDB1]
+Coordinates=0,0,144,267
+
diff --git a/Demos/MARSTemplateDCS/FMXClient.Forms.Main.fmx b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.fmx
new file mode 100644
index 00000000..9990bf0e
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.fmx
@@ -0,0 +1,27 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS Template Client'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ DesignerMasterStyle = 0
+ object TopToolBar: TToolBar
+ Size.Width = 640.000000000000000000
+ Size.Height = 48.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 0
+ object TitleLabel: TLabel
+ Align = Center
+ AutoSize = True
+ Size.Width = 121.000000000000000000
+ Size.Height = 16.000000000000000000
+ Size.PlatformDefault = False
+ StyleLookup = 'toollabel'
+ TextSettings.WordWrap = False
+ Text = 'MARS Template Client'
+ end
+ end
+end
diff --git a/Demos/MARSTemplateDCS/FMXClient.Forms.Main.pas b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.pas
new file mode 100644
index 00000000..e56b7400
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.pas
@@ -0,0 +1,34 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Layouts, FMX.Controls.Presentation;
+
+type
+ TMainForm = class(TForm)
+ TopToolBar: TToolBar;
+ TitleLabel: TLabel;
+ private
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ FMXClient.DataModules.Main
+ ;
+
+end.
diff --git a/Demos/MARSTemplateDCS/FMXClient.Forms.Main.vlb b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.vlb
new file mode 100644
index 00000000..b439f67e
--- /dev/null
+++ b/Demos/MARSTemplateDCS/FMXClient.Forms.Main.vlb
@@ -0,0 +1,26 @@
+[TopToolBar]
+Coordinates=317,78,82,36
+
+[MainDataModule.ItemsQueryDataSet]
+Coordinates=10,10,228,212
+
+[]
+Coordinates=145,78,71,36
+Visible=True
+
+[TitleLabel]
+Coordinates=236,78,71,58
+
+[MainDataModule.]
+Coordinates=472,428,215,249
+Visible=False
+
+[MainDataModule.EmployeeQuery1]
+Visible=False
+
+[MainDataModule.EmployeeQueryDataSet]
+Coordinates=100,10,253,58
+
+[MainDataModule.CountryByName1]
+Coordinates=10,78,216,58
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dpr b/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dpr
new file mode 100644
index 00000000..55e764b3
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
program MARSTemplateClientDCS;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ FMXClient.Forms.Main in 'FMXClient.Forms.Main.pas' {MainForm},
+ FMXClient.DataModules.Main in 'FMXClient.DataModules.Main.pas' {MainDataModule: TDataModule};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainDataModule, MainDataModule);
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dproj b/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dproj
new file mode 100644
index 00000000..d2bb36e1
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateClientDCS.dproj
@@ -0,0 +1,1423 @@
+
+
+ {B6B860BA-E3A5-48E9-8EC6-7FE516AE7FC4}
+ MARSTemplateClientDCS.dpr
+ True
+ Debug
+ 33809
+ Application
+ FMX
+ 19.0
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ MARSTemplateClientDCS
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ true
+ Base
+ true
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ MARSTemplateServer_Icon.ico
+
+
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ PerMonitor
+ MARSTemplateServer_Icon.ico
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ MARSTemplateServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+ TDataModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ MARSTemplateClientDCS.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ True
+ True
+ False
+ False
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ MARSTemplateClientDCS.exe
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ libMARSTemplateClient.so
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ libMARSTemplateClientDCS.so
+ true
+
+
+
+
+ true
+
+
+
+
+ classes.dex
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ libMARSTemplateClient.so
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateDCSProjectGroup.groupproj b/Demos/MARSTemplateDCS/MARSTemplateDCSProjectGroup.groupproj
new file mode 100644
index 00000000..6f92b123
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateDCSProjectGroup.groupproj
@@ -0,0 +1,96 @@
+
+
+ {6E23DEFF-F737-42C3-B8AD-2549B8F67C93}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dpr b/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dpr
new file mode 100644
index 00000000..607e67af
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dpr
@@ -0,0 +1,16 @@
+program MARSTemplateServerDCSApplication;
+
+uses
+ Vcl.Forms,
+ Server.DCS.Forms.Main in 'Server.DCS.Forms.Main.pas' {MainForm},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.MainFormOnTaskbar := True;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dproj b/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dproj
new file mode 100644
index 00000000..dfd71c9a
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSApplication.dproj
@@ -0,0 +1,1133 @@
+
+
+ {044D26EF-293D-4A96-9B9B-2E6CF9811486}
+ 19.0
+ VCL
+ MARSTemplateServerDCSApplication.dpr
+ True
+ Release
+ Win64
+ 3
+ Application
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ .\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ MARSTemplateServerDCSApplication
+ 1040
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;MARSClient.FireDAC;vclactnband;vclFireDAC;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;FormatFloatPackage;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;DataSetRESTRequestAdapterPackage;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;MARSClient.Core;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ $(BDS)\bin\default_app.manifest
+
+
+ DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;MARSClient.Core;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ $(BDS)\bin\default_app.manifest
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ false
+ true
+ PerMonitorV2
+
+
+ true
+ PerMonitorV2
+ true
+ 1033
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ PerMonitorV2
+
+
+ true
+ PerMonitorV2
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Application
+
+
+
+ MARSTemplateServerDCSApplication.dpr
+
+
+ DBExpress Enterprise Data Explorer Integration
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ CodeSite Express 5.3.3
+
+
+
+
+
+ MARSTemplateServerDCSApplication.exe
+ true
+
+
+
+
+ MARSTemplateServerDCSApplication.exe
+ true
+
+
+
+
+ MARSTemplateServerDCSApplication.exe
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dpr b/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dpr
new file mode 100644
index 00000000..2ed845df
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dpr
@@ -0,0 +1,201 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program MARSTemplateServerDCSConsoleApplication;
+{$APPTYPE CONSOLE}
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ System.SysUtils,
+ System.Types,
+// IPPeerServer, IPPeerAPI,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ Web.WebReq,
+ Web.WebBroker,
+{$else}
+ SysUtils, StrUtils,
+ Types,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ WebReq,
+ WebBroker,
+{$endif}
+ IdContext,
+ ServerConst in 'ServerConst.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule},
+ Server.Ignition in 'Server.Ignition.pas';
+
+{$R *.res}
+
+type
+ TDummyIndyServer = class
+ public
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+ end;
+
+
+procedure StartServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if not (AServer.Active) then
+ begin
+ AServer.DefaultPort := TServerEngine.Default.Port;
+ Writeln(Format(sStartingServer, [AServer.DefaultPort]));
+ AServer.Active := True;
+ end
+ else
+ Writeln(sServerRunning);
+ Write(cArrow);
+end;
+
+procedure StopServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if AServer.Active then
+ begin
+ Writeln(sStoppingServer);
+ AServer.Active := False;
+ Writeln(sServerStopped);
+ end
+ else
+ Writeln(sServerNotRunning);
+ Write(cArrow);
+end;
+
+procedure SetPort(const AServer: TIdHTTPWebBrokerBridge; const APort: string);
+var
+ LPort: Integer;
+ LWasActive: Boolean;
+begin
+ LPort := StrToIntDef(APort, -1);
+ if LPort = -1 then
+ begin
+ Writeln('Port should be an integer number. Try again.');
+ Exit;
+ end;
+
+ LWasActive := AServer.Active;
+ if LWasActive then
+ StopServer(AServer);
+ TServerEngine.Default.Port := LPort;
+ if LWasActive then
+ StartServer(AServer);
+ Writeln(Format(sPortSet, [IntToStr(TServerEngine.Default.Port)]));
+ Write(cArrow);
+end;
+
+procedure WriteCommands;
+begin
+ Writeln(sCommands);
+ Write(cArrow);
+end;
+
+procedure WriteStatus(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ Writeln(sIndyVersion + AServer.SessionList.Version);
+ Writeln(sActive + BoolToStr(AServer.Active, True));
+ Writeln(sPort + IntToStr(TServerEngine.Default.Port));
+ Write(cArrow);
+end;
+
+procedure SetupThreadScheduler(const AServer: TIdHTTPWebBrokerBridge);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ LScheduler := TIdSchedulerOfThreadPool.Create(AServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ AServer.Scheduler := LScheduler;
+ AServer.MaxConnections := LScheduler.PoolSize;
+ except
+ AServer.Scheduler.DisposeOf;
+ AServer.Scheduler := nil;
+ raise;
+ end;
+end;
+
+procedure RunServer();
+var
+ LServer: TIdHTTPWebBrokerBridge;
+ LDummyIndy: TDummyIndyServer;
+ LResponse: string;
+begin
+ WriteCommands;
+ LDummyIndy := TDummyIndyServer.Create;
+ try
+ LServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ LServer.DefaultPort := TServerEngine.Default.Port;
+ LServer.OnParseAuthentication := LDummyIndy.ParseAuthenticationHandler;
+ {$IFNDEF LINUX}
+ SetupThreadScheduler(LServer);
+ {$ENDIF}
+
+ while True do
+ begin
+ Readln(LResponse);
+ LResponse := LowerCase(LResponse);
+ if sametext(LResponse, cCommandStart) then
+ StartServer(LServer)
+ else if sametext(LResponse, cCommandStatus) then
+ WriteStatus(LServer)
+ else if sametext(LResponse, cCommandStop) then
+ StopServer(LServer)
+ {$ifdef DelphiXE3_UP}
+ else if LResponse.StartsWith(cCommandSetPort, True) then
+ SetPort(LServer, LResponse.Split([' '])[2])
+ {$else}
+ else if AnsiStartsText(cCommandSetPort, LResponse) then
+ SetPort(LServer, Copy(LResponse, Length(cCommandSetPort)+1, MAXINT))
+ {$endif}
+
+ else if sametext(LResponse, cCommandHelp) then
+ WriteCommands
+ else if sametext(LResponse, cCommandExit) then
+ if LServer.Active then
+ begin
+ StopServer(LServer);
+ break
+ end
+ else
+ break
+ else
+ begin
+ Writeln(sInvalidCommand);
+ Write(cArrow);
+ end;
+ end;
+ finally
+ LServer.Free;
+ end;
+ finally
+ LDummyIndy.Free;
+ end;
+end;
+
+{ TDummyIndyServer }
+
+procedure TDummyIndyServer.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+begin
+ try
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+ RunServer();
+ except
+ on E: Exception do
+ Writeln(E.ClassName, ': ', E.Message);
+ end
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dproj b/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dproj
new file mode 100644
index 00000000..624418ce
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSConsoleApplication.dproj
@@ -0,0 +1,1224 @@
+
+
+ {8EEC8DF2-3740-468A-937A-60168245FB71}
+ MARSTemplateServerDCSConsoleApplication.dpr
+ True
+ Release
+ 4225
+ Console
+ None
+ 19.0
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ MARSTemplateServerDCSConsoleApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ ./bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+ MARSTemplateServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
+ Debug
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ MARSTemplateServer_Icon.ico
+ (None)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ MARSTemplateServerConsoleApplication_Icon.ico
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ MARSTemplateServer_Icon.ico
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ MARSTemplateServer_Icon.ico
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+
+
+ MARSTemplateServer_Icon.ico
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ MARSTemplateServer_Icon.ico
+
+
+
+ MainSource
+
+
+
+
+ TWebModule
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ MARSTemplateServerDCSConsoleApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+ False
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSTemplateServerDCSConsoleApplication
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSTemplateServerDCSConsoleApplication.exe
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dpr b/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dpr
new file mode 100644
index 00000000..7e459dd8
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dpr
@@ -0,0 +1,19 @@
+program MARSTemplateServerDCSDaemon;
+
+{$APPTYPE CONSOLE}
+
+{$R *.res}
+
+uses
+ Classes,
+ SysUtils,
+ {$ENDIF }
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+begin
+ {$IFDEF LINUX}
+ TMARSDaemon.Current.Name := 'MARSTemplateServerDaemon';
+ TMARSDaemon.Current.Start;
+ {$ENDIF}
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dproj b/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dproj
new file mode 100644
index 00000000..7bea564e
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSDaemon.dproj
@@ -0,0 +1,1211 @@
+
+
+ {9D225C2C-24C2-48B4-8ABE-52C04AF576AE}
+ 19.0
+ None
+ MARSTemplateServerDCSDaemon.dpr
+ True
+ Debug
+ Linux64
+ 128
+ Console
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ .\lib\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ RESTComponents;emsclientfiredac;DataSnapFireDAC;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ MARSTemplateServerDCSDaemon
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage);$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;dbexpress;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)
+ /usr/bin/xterm -e "%debuggee%"
+ MARSTemplateServer_Icon.ico
+ (None)
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage);$(DCC_UsePackage)
+ true
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;RadiantShapesFmx_Design;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ /usr/bin/xterm -e "%debuggee%"
+
+
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Application
+
+
+
+ MARSTemplateServerDCSDaemon.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARSTemplateServerDCSDaemon
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ False
+ False
+ False
+ True
+ False
+ False
+ False
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dpr b/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dpr
new file mode 100644
index 00000000..332b72ad
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program MARSTemplateServerDCSFMXApplication;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ Server.FMX.Forms.Main in 'Server.FMX.Forms.Main.pas' {MainForm},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dproj b/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dproj
new file mode 100644
index 00000000..0785c5bb
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSFMXApplication.dproj
@@ -0,0 +1,1354 @@
+
+
+ {2DC28130-9EB1-48C8-9CA6-0F3CFD5D8E1D}
+ MARSTemplateServerDCSFMXApplication.dpr
+ True
+ Release
+ 37905
+ Application
+ FMX
+ 19.0
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ MARSTemplateServerDCSFMXApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
+ Debug
+ true
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+ MARSTemplateServer_Icon.ico
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ MARSTemplateServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ MARSTemplateServerFMXApplication_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ Debug
+
+
+ true
+ Cfg_1
+ true
+ true
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers
+ MARSTemplateServer_Icon.ico
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ MARSTemplateServer_Icon.ico
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+ MARSTemplateServer_Icon.ico
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ MARSTemplateServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ MARSTemplateServerDCSFMXApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ True
+ True
+ False
+ True
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSTemplateServerDCSFMXApplication.exe
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dpr b/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dpr
new file mode 100644
index 00000000..87b5702d
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dpr
@@ -0,0 +1,43 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program MARSTemplateServerDCSService;
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ Vcl.SvcMgr,
+{$else}
+ SvcMgr,
+{$endif}
+
+ Server.Service in 'Server.Service.pas' {ServerService: TService},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+{$R *.RES}
+
+begin
+ // Windows 2003 Server requires StartServiceCtrlDispatcher to be
+ // called before CoRegisterClassObject, which can be called indirectly
+ // by Application.Initialize. TServiceApplication.DelayInitialize allows
+ // Application.Initialize to be called from TService.Main (after
+ // StartServiceCtrlDispatcher has been called).
+ //
+ // Delayed initialization of the Application object may affect
+ // events which then occur prior to initialization, such as
+ // TService.OnCreate. It is only recommended if the ServiceApplication
+ // registers a class object with OLE and is intended for use with
+ // Windows 2003 Server.
+ //
+ // Application.DelayInitialize := True;
+ //
+ if not Application.DelayInitialize or Application.Installing then
+ Application.Initialize;
+ Application.CreateForm(TServerService, ServerService);
+ Application.Run;
+end.
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dproj b/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dproj
new file mode 100644
index 00000000..6eb3a0c6
--- /dev/null
+++ b/Demos/MARSTemplateDCS/MARSTemplateServerDCSService.dproj
@@ -0,0 +1,1210 @@
+
+
+ {FEF5DF94-50B0-46F7-9F4B-6C355F140A2F}
+ MARSTemplateServerDCSService.dpr
+ True
+ Release
+ 3
+ Application
+ None
+ 19.0
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ MARSTemplateServerDCSService
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Winapi;$(DCC_Namespace)
+ .\lib\$(Platform)\$(Config)
+ .\bin
+
+
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ MARSTemplateServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ MARSTemplateServer_Icon.ico
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ MARS.ico
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+ TService
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ MARSTemplateServerDCSService.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ True
+ True
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSTemplateServerDCSService.exe
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+ ..\$(PROJECTNAME).launchscreen
+ 64
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/MARSTemplateDCS/MARSTemplateServer_Icon.ico b/Demos/MARSTemplateDCS/MARSTemplateServer_Icon.ico
new file mode 100644
index 00000000..0067d86b
Binary files /dev/null and b/Demos/MARSTemplateDCS/MARSTemplateServer_Icon.ico differ
diff --git a/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.dfm b/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.dfm
new file mode 100644
index 00000000..dfe3c09f
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.dfm
@@ -0,0 +1,80 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MainForm'
+ ClientHeight = 289
+ ClientWidth = 554
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object TopPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 554
+ Height = 73
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 28
+ Top = 17
+ Width = 63
+ Height = 13
+ Caption = 'Port number:'
+ end
+ object StartButton: TButton
+ Left = 16
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StartServerAction
+ TabOrder = 0
+ end
+ object StopButton: TButton
+ Left = 104
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StopServerAction
+ TabOrder = 1
+ end
+ object PortNumberEdit: TEdit
+ Left = 97
+ Top = 14
+ Width = 82
+ Height = 21
+ TabOrder = 2
+ OnChange = PortNumberEditChange
+ end
+ end
+ object MainTreeView: TTreeView
+ Left = 0
+ Top = 73
+ Width = 554
+ Height = 216
+ Align = alClient
+ Indent = 19
+ TabOrder = 1
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Caption = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Caption = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.pas b/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.pas
new file mode 100644
index 00000000..29bd4402
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.DCS.Forms.Main.pas
@@ -0,0 +1,142 @@
+unit Server.DCS.Forms.Main;
+
+{$I MARS.inc}
+
+interface
+
+uses
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, System.Actions, Vcl.ActnList,
+ Vcl.StdCtrls, Vcl.ExtCtrls
+, MARS.http.Server.DCS
+;
+
+type
+ TMainForm = class(TForm)
+ TopPanel: TPanel;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ PortNumberEdit: TEdit;
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ MainTreeView: TTreeView;
+ procedure FormCreate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ private
+ FServer: TMARShttpServerDCS;
+ protected
+ procedure RenderEngines(const ATreeView: TTreeView);
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ StrUtils
+, MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Registry
+, MARS.Core.Registry.Utils
+, Server.Ignition
+;
+
+{ TMainForm }
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := IntToStr(TServerEngine.Default.Port);
+ RenderEngines(MainTreeView);
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.RenderEngines(const ATreeView: TTreeView);
+begin
+
+ ATreeview.Items.BeginUpdate;
+ try
+ ATreeview.Items.Clear;
+ TMARSEngineRegistry.Instance.EnumerateEngines(
+ procedure (AName: string; AEngine: TMARSEngine)
+ var
+ LEngineItem: TTreeNode;
+ begin
+ LEngineItem := ATreeview.Items.AddChild(nil
+ , AName + ' [ :' + AEngine.Port.ToString + AEngine.BasePath + ']'
+ );
+
+ AEngine.EnumerateApplications(
+ procedure (AName: string; AApplication: TMARSApplication)
+ var
+ LApplicationItem: TTreeNode;
+ begin
+ LApplicationItem := ATreeview.Items.AddChild(LEngineItem
+ , AApplication.Name + ' [' + AApplication.BasePath + ']'
+ );
+
+ AApplication.EnumerateResources(
+ procedure (AName: string; AInfo: TMARSConstructorInfo)
+ begin
+ ATreeview.Items.AddChild(
+ LApplicationItem
+ , AInfo.TypeTClass.ClassName + ' [' + AName + ']'
+ );
+
+ end
+ );
+ end
+ );
+ end
+ );
+
+ if ATreeView.Items.Count > 0 then
+ ATreeView.Items[0].Expand(True);
+ finally
+ ATreeView.Items.EndUpdate;
+ end;
+
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerDCS.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.fmx b/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.fmx
new file mode 100644
index 00000000..fdadb145
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.fmx
@@ -0,0 +1,66 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS-Curiosity Template Server FMX'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ OnCreate = FormCreate
+ OnClose = FormClose
+ DesignerMasterStyle = 0
+ object Layout1: TLayout
+ Align = Top
+ Size.Width = 640.000000000000000000
+ Size.Height = 121.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 1
+ object PortNumberEdit: TEdit
+ Touch.InteractiveGestures = [LongTap, DoubleTap]
+ TabOrder = 0
+ Text = '8080'
+ Position.X = 109.000000000000000000
+ Position.Y = 22.000000000000000000
+ OnChange = PortNumberEditChange
+ end
+ object Label1: TLabel
+ Position.X = 16.000000000000000000
+ Position.Y = 24.000000000000000000
+ Size.Width = 89.000000000000000000
+ Size.Height = 17.000000000000000000
+ Size.PlatformDefault = False
+ Text = 'Port number:'
+ end
+ object StartButton: TButton
+ Action = StartServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 16.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 2
+ end
+ object StopButton: TButton
+ Action = StopServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 104.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 3
+ end
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Text = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Text = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.pas b/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.pas
new file mode 100644
index 00000000..40aea6cc
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.FMX.Forms.Main.pas
@@ -0,0 +1,97 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.FMX.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Controls.Presentation, FMX.Edit, FMX.Layouts, System.Actions, FMX.ActnList
+, MARS.http.Server.DCS
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ Layout1: TLayout;
+ PortNumberEdit: TEdit;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ private
+ FServer: TMARShttpServerDCS;
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ MARS.Core.URL, MARS.Core.Engine
+, Server.Ignition
+;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := TServerEngine.Default.Port.ToString;
+
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerDCS.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/Server.Forms.Main.dfm b/Demos/MARSTemplateDCS/Server.Forms.Main.dfm
new file mode 100644
index 00000000..4bd5c813
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Forms.Main.dfm
@@ -0,0 +1,83 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARSTemplate Server'
+ ClientHeight = 201
+ ClientWidth = 464
+ Color = clBtnFace
+ Constraints.MinHeight = 240
+ Constraints.MinWidth = 480
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object TopPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 464
+ Height = 73
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 28
+ Top = 17
+ Width = 63
+ Height = 13
+ Caption = 'Port number:'
+ end
+ object StartButton: TButton
+ Left = 16
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StartServerAction
+ TabOrder = 0
+ end
+ object StopButton: TButton
+ Left = 104
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StopServerAction
+ TabOrder = 1
+ end
+ object PortNumberEdit: TEdit
+ Left = 97
+ Top = 14
+ Width = 82
+ Height = 21
+ TabOrder = 2
+ OnChange = PortNumberEditChange
+ end
+ end
+ object MainTreeView: TTreeView
+ Left = 0
+ Top = 73
+ Width = 464
+ Height = 128
+ Align = alClient
+ Indent = 19
+ TabOrder = 1
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Caption = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Caption = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/MARSTemplateDCS/Server.Forms.Main.pas b/Demos/MARSTemplateDCS/Server.Forms.Main.pas
new file mode 100644
index 00000000..0673418a
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Forms.Main.pas
@@ -0,0 +1,148 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Forms.Main;
+
+{$I MARS.inc}
+
+interface
+
+uses Classes, SysUtils, Forms, ActnList, ComCtrls, StdCtrls, Controls, ExtCtrls
+ , System.Actions
+ , MARS.http.Server.Indy
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ TopPanel: TPanel;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ PortNumberEdit: TEdit;
+ MainTreeView: TTreeView;
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ private
+ FServer: TMARShttpServerIndy;
+ protected
+ procedure RenderEngines(const ATreeView: TTreeView);
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ StrUtils, Web.HttpApp
+ , MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Registry
+ , MARS.Core.Registry.Utils
+ , Server.Ignition
+;
+
+procedure TMainForm.RenderEngines(const ATreeView: TTreeView);
+begin
+
+ ATreeview.Items.BeginUpdate;
+ try
+ ATreeview.Items.Clear;
+ TMARSEngineRegistry.Instance.EnumerateEngines(
+ procedure (AName: string; AEngine: TMARSEngine)
+ var
+ LEngineItem: TTreeNode;
+ begin
+ LEngineItem := ATreeview.Items.AddChild(nil
+ , AName + ' [ :' + AEngine.Port.ToString + AEngine.BasePath + ']'
+ );
+
+ AEngine.EnumerateApplications(
+ procedure (AName: string; AApplication: TMARSApplication)
+ var
+ LApplicationItem: TTreeNode;
+ begin
+ LApplicationItem := ATreeview.Items.AddChild(LEngineItem
+ , AApplication.Name + ' [' + AApplication.BasePath + ']'
+ );
+
+ AApplication.EnumerateResources(
+ procedure (AName: string; AInfo: TMARSConstructorInfo)
+ begin
+ ATreeview.Items.AddChild(
+ LApplicationItem
+ , AInfo.TypeTClass.ClassName + ' [' + AName + ']'
+ );
+
+ end
+ );
+ end
+ );
+ end
+ );
+
+ if ATreeView.Items.Count > 0 then
+ ATreeView.Items[0].Expand(True);
+ finally
+ ATreeView.Items.EndUpdate;
+ end;
+end;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := IntToStr(TServerEngine.Default.Port);
+ RenderEngines(MainTreeView);
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerIndy.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/Server.Ignition.pas b/Demos/MARSTemplateDCS/Server.Ignition.pas
new file mode 100644
index 00000000..93fbdc6c
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Ignition.pas
@@ -0,0 +1,132 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Ignition;
+
+{$I MARS.inc}
+
+interface
+
+uses
+ Classes, SysUtils, Rtti
+ , MARS.Core.Engine
+;
+
+type
+ TServerEngine=class
+ private
+ class var FEngine: TMARSEngine;
+{$IFDEF MARS_FIREDAC}
+ class var FAvailableConnectionDefs: TArray;
+{$ENDIF}
+ public
+ class constructor CreateEngine;
+ class destructor DestroyEngine;
+ class property Default: TMARSEngine read FEngine;
+ end;
+
+
+implementation
+
+uses
+ MARS.Core.Activation, MARS.Core.Activation.Interfaces
+ , MARS.Core.Application, MARS.Core.Utils, MARS.Utils.Parameters.IniFile
+ , MARS.Core.MessageBodyWriter, MARS.Core.MessageBodyWriters
+ , MARS.Core.MessageBodyReaders, MARS.Data.MessageBodyWriters
+ {$IFDEF MARS_FIREDAC} , MARS.Data.FireDAC {$ENDIF}
+ {$IFDEF MSWINDOWS} , MARS.mORMotJWT.Token {$ELSE} , MARS.JOSEJWT.Token {$ENDIF}
+ , Server.Resources
+ ;
+
+{ TServerEngine }
+
+class constructor TServerEngine.CreateEngine;
+begin
+ FEngine := TMARSEngine.Create;
+ try
+ // Engine configuration
+ FEngine.Parameters.LoadFromIniFile;
+
+ // Application configuration
+ FEngine.AddApplication('DefaultApp', '/default', [ 'Server.Resources.*']);
+{$IFDEF MARS_FIREDAC}
+ FAvailableConnectionDefs := TMARSFireDAC.LoadConnectionDefs(FEngine.Parameters, 'FireDAC');
+{$ENDIF}
+{$REGION 'BeforeHandleRequest example'}
+(*
+ FEngine.BeforeHandleRequest :=
+ function (const AEngine: TMARSEngine;
+ const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ var Handled: Boolean
+ ): Boolean
+ begin
+ Result := True;
+{
+ // skip favicon requests (browser)
+ if SameText(AURL.Document, 'favicon.ico') then
+ begin
+ Result := False;
+ Handled := True;
+ end;
+}
+{
+ // Handle CORS and PreFlight
+ if SameText(ARequest.Method, 'OPTIONS') then
+ begin
+ Handled := True;
+ Result := False;
+ end;
+}
+ end;
+*)
+{$ENDREGION}
+{$REGION 'Global BeforeInvoke handler example'}
+(*
+ // to execute something before each activation
+ TMARSActivation.RegisterBeforeInvoke(
+ procedure (const AActivation: IMARSActivation; out AIsAllowed: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+{$REGION 'Global AfterInvoke handler example'}
+(*
+ // to execute something after each activation
+ TMARSActivation.RegisterAfterInvoke(
+ procedure (const AActivation: IMARSActivation)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+{$REGION 'Global InvokeError handler example'}
+(*
+ // to execute something on error
+ TMARSActivation.RegisterInvokeError(
+ procedure (const AActivation: IMARSActivation; const AException: Exception; var AHandled: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+ except
+ FreeAndNil(FEngine);
+ raise;
+ end;
+end;
+
+class destructor TServerEngine.DestroyEngine;
+begin
+{$IFDEF MARS_FIREDAC}
+ TMARSFireDAC.CloseConnectionDefs(FAvailableConnectionDefs);
+{$ENDIF}
+ FreeAndNil(FEngine);
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/Server.Resources.pas b/Demos/MARSTemplateDCS/Server.Resources.pas
new file mode 100644
index 00000000..caafa682
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Resources.pas
@@ -0,0 +1,48 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Resources;
+
+interface
+
+uses
+ SysUtils, Classes
+
+ , MARS.Core.Attributes, MARS.Core.MediaType, MARS.Core.JSON, MARS.Core.Response
+ , MARS.Core.URL
+
+ , MARS.Core.Token.Resource //, MARS.Core.Token
+;
+
+type
+ [Path('helloworld')]
+ THelloWorldResource = class
+ protected
+ public
+ [GET, Produces(TMediaType.TEXT_PLAIN)]
+ function SayHelloWorld: string;
+ end;
+
+ [Path('token')]
+ TTokenResource = class(TMARSTokenResource)
+ end;
+
+implementation
+
+uses
+ MARS.Core.Registry
+;
+
+{ THelloWorldResource }
+
+function THelloWorldResource.SayHelloWorld: string;
+begin
+ Result := 'Hello World!';
+end;
+
+initialization
+ TMARSResourceRegistry.Instance.RegisterResource;
+ TMARSResourceRegistry.Instance.RegisterResource;
+end.
diff --git a/Demos/MARSTemplateDCS/Server.Service.dfm b/Demos/MARSTemplateDCS/Server.Service.dfm
new file mode 100644
index 00000000..e697b752
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Service.dfm
@@ -0,0 +1,10 @@
+object ServerService: TServerService
+ OldCreateOrder = False
+ OnCreate = ServiceCreate
+ OnDestroy = ServiceDestroy
+ DisplayName = 'MARSTemplate Service'
+ OnStart = ServiceStart
+ OnStop = ServiceStop
+ Height = 150
+ Width = 215
+end
diff --git a/Demos/MARSTemplateDCS/Server.Service.pas b/Demos/MARSTemplateDCS/Server.Service.pas
new file mode 100644
index 00000000..86c5a5ca
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.Service.pas
@@ -0,0 +1,124 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Service;
+
+{$I MARS.inc}
+
+interface
+
+uses
+{$ifdef DelphiXE3_UP}
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics
+, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, Web.WebReq, Web.WebBroker
+{$else}
+ Windows, Messages, SysUtils, Classes, Graphics
+, Controls, SvcMgr, Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, WebReq, WebBroker
+{$endif}
+, IdContext
+, MARS.http.Server.DCS
+;
+
+type
+ TServerService = class(TService)
+ procedure ServiceCreate(Sender: TObject);
+ procedure ServiceDestroy(Sender: TObject);
+ procedure ServiceStart(Sender: TService; var Started: Boolean);
+ procedure ServiceStop(Sender: TService; var Stopped: Boolean);
+ private
+ FServer: TIdHTTPWebBrokerBridge;
+
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+
+ public
+ function GetServiceController: TServiceController; override;
+
+ const DEFAULT_PORT = 8080;
+ end;
+
+var
+ ServerService: TServerService;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ IdSchedulerOfThreadPool
+, Server.Ignition
+, Server.WebModule
+;
+
+procedure ServiceController(CtrlCode: DWord); stdcall;
+begin
+ ServerService.Controller(CtrlCode);
+end;
+
+function TServerService.GetServiceController: TServiceController;
+begin
+ Result := ServiceController;
+end;
+
+procedure TServerService.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+procedure TServerService.ServiceCreate(Sender: TObject);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+
+ FServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+
+ LScheduler := TIdSchedulerOfThreadPool.Create(FServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ FServer.Scheduler := LScheduler;
+ FServer.MaxConnections := LScheduler.PoolSize;
+ FServer.OnParseAuthentication := ParseAuthenticationHandler;
+ except
+ FServer.Scheduler.Free;
+ FServer.Scheduler := nil;
+ raise;
+ end;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TServerService.ServiceDestroy(Sender: TObject);
+begin
+ FreeAndNil(FServer);
+end;
+
+procedure TServerService.ServiceStart(Sender: TService; var Started: Boolean);
+begin
+ FServer.Active := True;
+ Started := FServer.Active;
+end;
+
+procedure TServerService.ServiceStop(Sender: TService; var Stopped: Boolean);
+begin
+ FServer.Active := False;
+ Stopped := not FServer.Active;
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/Server.WebModule.dfm b/Demos/MARSTemplateDCS/Server.WebModule.dfm
new file mode 100644
index 00000000..a589a41a
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.WebModule.dfm
@@ -0,0 +1,12 @@
+object ServerWebModule: TServerWebModule
+ OldCreateOrder = False
+ Actions = <
+ item
+ Default = True
+ Name = 'DefaultHandler'
+ PathInfo = '/'
+ OnAction = ServerWebModuleDefaultHandlerAction
+ end>
+ Height = 230
+ Width = 415
+end
diff --git a/Demos/MARSTemplateDCS/Server.WebModule.pas b/Demos/MARSTemplateDCS/Server.WebModule.pas
new file mode 100644
index 00000000..72908095
--- /dev/null
+++ b/Demos/MARSTemplateDCS/Server.WebModule.pas
@@ -0,0 +1,57 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.WebModule;
+
+{$I MARS.inc}
+
+interface
+
+uses System.SysUtils, System.Classes, Web.HTTPApp;
+
+type
+ TServerWebModule = class(TWebModule)
+ procedure ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ WebModuleClass: TComponentClass = TServerWebModule;
+
+implementation
+
+{%CLASSGROUP 'System.Classes.TPersistent'}
+
+{$R *.dfm}
+
+uses
+ MARS.http.Server.Indy
+, Server.Ignition;
+
+procedure TServerWebModule.ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ inherited;
+
+ if not TServerEngine.Default.HandleRequest(TMARSWebRequest.Create(Request), TMARSWebResponse.Create(Response)) then
+ begin
+ Response.ContentType := 'application/json';
+ Response.Content :=
+ '{"success": false, "details": '
+ + '{'
+ + '"error": "Request not found",'
+ + '"pathinfo": "' + Request.PathInfo + '"'
+ + '}'
+ + '}';
+ end
+ else
+ Handled := True;
+end;
+
+end.
diff --git a/Demos/MARSTemplateDCS/ServerConst.pas b/Demos/MARSTemplateDCS/ServerConst.pas
new file mode 100644
index 00000000..49558197
--- /dev/null
+++ b/Demos/MARSTemplateDCS/ServerConst.pas
@@ -0,0 +1,42 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit ServerConst;
+
+interface
+
+resourcestring
+ sPortInUse = '- Error: Port %s already in use';
+ sPortSet = '- Port set to %s';
+ sServerRunning = '- The Server is already running';
+ sStartingServer = '- Starting HTTP Server on port %d';
+ sStoppingServer = '- Stopping Server';
+ sServerStopped = '- Server Stopped';
+ sServerNotRunning = '- The Server is not running';
+ sInvalidCommand = '- Error: Invalid Command';
+ sIndyVersion = '- Indy Version: ';
+ sActive = '- Active: ';
+ sPort = '- Port: ';
+ sSessionID = '- Session ID CookieName: ';
+ sCommands = 'Enter a Command: ' + slineBreak +
+ ' - "start" to start the server'+ slineBreak +
+ ' - "stop" to stop the server'+ slineBreak +
+ ' - "set port" to change the default port'+ slineBreak +
+ ' - "status" for Server status'+ slineBreak +
+ ' - "help" to show commands'+ slineBreak +
+ ' - "exit" to close the application';
+
+const
+ cArrow = '->';
+ cCommandStart = 'start';
+ cCommandStop = 'stop';
+ cCommandStatus = 'status';
+ cCommandHelp = 'help';
+ cCommandSetPort = 'set port';
+ cCommandExit = 'exit';
+
+implementation
+
+end.
diff --git a/Demos/MARSTemplateDCS/bin/MARSTemplateServerApplication.ini b/Demos/MARSTemplateDCS/bin/MARSTemplateServerApplication.ini
new file mode 100644
index 00000000..e098e5da
--- /dev/null
+++ b/Demos/MARSTemplateDCS/bin/MARSTemplateServerApplication.ini
@@ -0,0 +1,2 @@
+[DefaultEngine]
+ThreadPoolSize=100
\ No newline at end of file
diff --git a/Demos/MultipartFormData/MultipartFormDataServerApplication.dproj b/Demos/MultipartFormData/MultipartFormDataServerApplication.dproj
index c3661c21..a9a4f3c5 100644
--- a/Demos/MultipartFormData/MultipartFormDataServerApplication.dproj
+++ b/Demos/MultipartFormData/MultipartFormDataServerApplication.dproj
@@ -3,7 +3,7 @@
{0A5E1DDC-90B4-4B41-A7DC-2B0FC45D4349}
MultipartFormDataServerApplication.dpr
True
- Release
+ Debug
3
Application
VCL
diff --git a/Demos/MultipartFormData/Server.Ignition.pas b/Demos/MultipartFormData/Server.Ignition.pas
index 7151c084..d3d7c467 100644
--- a/Demos/MultipartFormData/Server.Ignition.pas
+++ b/Demos/MultipartFormData/Server.Ignition.pas
@@ -35,6 +35,7 @@ implementation
, MARS.Core.Application, MARS.Core.Utils, MARS.Utils.Parameters.IniFile
, MARS.Core.MessageBodyWriter, MARS.Core.MessageBodyWriters
, MARS.Core.MessageBodyReaders, MARS.Data.MessageBodyWriters
+ , MARS.Core.RequestAndResponse.Interfaces
{$IFDEF MARS_FIREDAC} , MARS.Data.FireDAC {$ENDIF}
{$IFDEF MSWINDOWS} , MARS.mORMotJWT.Token {$ELSE} , MARS.JOSEJWT.Token {$ENDIF}
, MARS.Core.URL, Web.HttpApp
@@ -58,8 +59,8 @@ implementation
{$REGION 'BeforeHandleRequest example'}
FEngine.BeforeHandleRequest :=
- function (const AEngine: TMARSEngine; const AURL: TMARSURL;
- const ARequest: TWebRequest; const AResponse: TWebResponse;
+ function (const AEngine: TMARSEngine;
+ const AURL: TMARSURL; const ARequest: IMARSRequest; const AResponse: IMARSResponse;
var Handled: Boolean): Boolean
begin
Result := True;
diff --git a/Demos/Mustache/MARSMustacheServerApacheModule.dproj b/Demos/Mustache/MARSMustacheServerApacheModule.dproj
index 1888c829..9aaa3c93 100644
--- a/Demos/Mustache/MARSMustacheServerApacheModule.dproj
+++ b/Demos/Mustache/MARSMustacheServerApacheModule.dproj
@@ -1,7 +1,7 @@
{F003A08E-799F-4C20-8128-819AAAAC0A88}
- 18.2
+ 18.8
None
MARSMustacheServerApacheModule.dpr
True
@@ -124,19 +124,19 @@
-
-
- MARSMustacheServerApacheModule.dll
+
+
true
-
-
+
+
+ libMARSMustacheServerApacheModule.so
true
-
-
+
+
true
@@ -145,14 +145,24 @@
true
+
+
+ MARSMustacheServerApacheModule.dll
+ true
+
+
+
+
+ true
+
+
true
-
-
- libMARSMustacheServerApacheModule.so
+
+
true
@@ -161,7 +171,6 @@
1
- Contents\MacOS
0
@@ -170,6 +179,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -182,90 +205,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -283,6 +458,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -292,6 +471,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -314,6 +497,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -323,6 +510,9 @@
0
+
+ 0
+
0
@@ -335,6 +525,9 @@
0
+
+ 0
+
0
@@ -350,6 +543,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -361,6 +565,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -372,6 +609,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -383,6 +675,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -416,10 +818,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -445,6 +872,7 @@
1
+
@@ -452,12 +880,20 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -473,10 +909,19 @@
1
+
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -512,7 +957,9 @@
+
+
True
diff --git a/Demos/Mustache/MARSMustacheServerApplication.dproj b/Demos/Mustache/MARSMustacheServerApplication.dproj
index 3f68e7e3..b8dfba51 100644
--- a/Demos/Mustache/MARSMustacheServerApplication.dproj
+++ b/Demos/Mustache/MARSMustacheServerApplication.dproj
@@ -7,7 +7,7 @@
Application
VCL
DCC32
- 18.2
+ 18.8
1
Win32
@@ -167,7 +167,6 @@
1
- Contents\MacOS
0
@@ -176,6 +175,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -188,90 +201,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -289,6 +454,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -298,6 +467,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -320,6 +493,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -329,6 +506,9 @@
0
+
+ 0
+
0
@@ -341,6 +521,9 @@
0
+
+ 0
+
0
@@ -356,6 +539,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -367,6 +561,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -378,6 +605,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -389,6 +671,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -422,10 +814,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -451,6 +868,7 @@
1
+
@@ -458,12 +876,20 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -479,10 +905,19 @@
1
+
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -518,7 +953,9 @@
+
+
12
diff --git a/Demos/Mustache/MARSMustacheServerApplication.res b/Demos/Mustache/MARSMustacheServerApplication.res
index da24bfd7..aff75aeb 100644
Binary files a/Demos/Mustache/MARSMustacheServerApplication.res and b/Demos/Mustache/MARSMustacheServerApplication.res differ
diff --git a/Demos/Mustache/MARSMustacheServerConsoleApplication.dproj b/Demos/Mustache/MARSMustacheServerConsoleApplication.dproj
index 5b8c88d6..93f8e961 100644
--- a/Demos/Mustache/MARSMustacheServerConsoleApplication.dproj
+++ b/Demos/Mustache/MARSMustacheServerConsoleApplication.dproj
@@ -1,7 +1,7 @@
{3989725D-F9E4-4178-9FBC-93DC284F63C7}
- 18.2
+ 18.8
None
MARSMustacheServerConsoleApplication.dpr
True
@@ -130,12 +130,22 @@
true
+
+
+ true
+
+
+
+
+ true
+
+
true
-
+
true
@@ -150,7 +160,6 @@
1
- Contents\MacOS
0
@@ -159,6 +168,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -171,90 +194,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -272,6 +447,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -281,6 +460,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -303,6 +486,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -312,6 +499,9 @@
0
+
+ 0
+
0
@@ -324,6 +514,9 @@
0
+
+ 0
+
0
@@ -339,6 +532,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -350,6 +554,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -361,6 +598,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -372,6 +664,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -405,10 +807,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -434,6 +861,7 @@
1
+
@@ -441,12 +869,20 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -462,10 +898,19 @@
1
+
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -501,7 +946,9 @@
+
+
True
diff --git a/Demos/Mustache/MARSMustacheServerFMXApplication.dproj b/Demos/Mustache/MARSMustacheServerFMXApplication.dproj
index 79bf2807..9260c1bf 100644
--- a/Demos/Mustache/MARSMustacheServerFMXApplication.dproj
+++ b/Demos/Mustache/MARSMustacheServerFMXApplication.dproj
@@ -1,13 +1,13 @@
{E0F4FA79-1B8C-437A-AB05-73EF7AD349A8}
- 18.2
+ 18.8
FMX
MARSMustacheServerFMXApplication.dpr
True
Debug
Win32
- 1119
+ 37983
Application
@@ -18,6 +18,11 @@
Base
true
+
+ true
+ Base
+ true
+
true
Base
@@ -38,6 +43,11 @@
Base
true
+
+ true
+ Base
+ true
+
true
Base
@@ -120,6 +130,30 @@
$(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
Debug
package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;bindcompfmx;FmxTeeUI;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;ibmonitor;FMXTee;soaprtl;DbxCommonDriver;ibxpress;xmlrtl;soapmidas;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage);$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png
@@ -145,7 +179,7 @@
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
iPhoneAndiPad
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
@@ -162,6 +196,22 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
Debug
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png
@@ -187,7 +237,7 @@
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
iPhoneAndiPad
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
@@ -204,6 +254,22 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
Debug
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
@@ -234,7 +300,7 @@
$(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png
$(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png
- CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera;CFBundleShortVersionString=1.0.0;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSFaceIDUsageDescription=The reason for accessing the face id;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png
@@ -244,6 +310,22 @@
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png
$(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
$(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
@@ -254,8 +336,23 @@
/usr/X11/bin/xterm -e "%debuggee%"
DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
true
- CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ .\bin\$(Platform)
+ .\lib\$(Platform)
+ (None)
+ /usr/X11/bin/xterm -e "%debuggee%"
+ DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXInterBaseDriver;emsclientfiredac;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage);$(DCC_UsePackage)
.\lib\$(Platform)
@@ -295,12 +392,12 @@
true
1033
true
- true
false
+ PerMonitor
true
- true
+ PerMonitor
false
@@ -310,11 +407,11 @@
true
- true
+ PerMonitor
true
- true
+ PerMonitor
@@ -359,13 +456,19 @@
true
-
+
+ MARSTemplateServerFMXApplication.icns
true
-
-
+
+
+ true
+
+
+
+
true
@@ -375,37 +478,41 @@
true
-
-
+
+
true
-
-
+
+
+ Assets\
+ Logo150x150.png
true
-
+
- MARSTemplateServerFMXApplication.icns
true
-
+
- Info.plist
true
-
-
+
+
true
-
+
+
+ true
+
+
+
- Assets\
- Logo150x150.png
+ Info.plist
true
@@ -424,7 +531,6 @@
1
- Contents\MacOS
0
@@ -433,6 +539,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -445,90 +565,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -548,6 +820,11 @@
1
.framework
+
+ Contents\MacOS
+ 1
+ .framework
+
0
@@ -570,6 +847,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -593,6 +875,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
@@ -602,6 +889,9 @@
0
+
+ 0
+
0
@@ -615,6 +905,10 @@
Contents\Resources\StartUp\
0
+
+ Contents\Resources\StartUp\
+ 0
+
0
@@ -630,6 +924,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -641,6 +946,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -652,6 +990,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -663,6 +1056,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -696,10 +1199,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -751,29 +1279,51 @@
1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
..\
1
+
+ ..\
+ 1
+
Contents
1
+
+ Contents
+ 1
+
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -790,10 +1340,20 @@
Contents\MacOS
1
+
+ Contents\MacOS
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -829,14 +1389,18 @@
+
+
True
+ True
True
True
True
True
+ True
True
True
diff --git a/Demos/Mustache/MARSMustacheServerISAPI.dproj b/Demos/Mustache/MARSMustacheServerISAPI.dproj
index 4a13f336..966175f9 100644
--- a/Demos/Mustache/MARSMustacheServerISAPI.dproj
+++ b/Demos/Mustache/MARSMustacheServerISAPI.dproj
@@ -1,7 +1,7 @@
{7F50F5E9-ED2D-4A28-9C9E-10FAA1B36C4D}
- 18.2
+ 18.8
VCL
MARSMustacheServerISAPI.dpr
True
@@ -134,7 +134,6 @@
1
- Contents\MacOS
0
@@ -143,6 +142,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -155,90 +168,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -256,6 +421,10 @@
1
.framework
+
+ 1
+ .framework
+
0
@@ -265,6 +434,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -287,6 +460,10 @@
1
.dylib
+
+ 1
+ .dylib
+
0
.bpl
@@ -296,6 +473,9 @@
0
+
+ 0
+
0
@@ -308,6 +488,9 @@
0
+
+ 0
+
0
@@ -323,6 +506,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -334,6 +528,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -345,6 +572,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -356,6 +638,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -389,10 +781,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -418,6 +835,7 @@
1
+
@@ -425,12 +843,20 @@
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -446,10 +872,19 @@
1
+
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -485,7 +920,9 @@
+
+
True
diff --git a/Demos/Mustache/MARSMustacheServerService.dproj b/Demos/Mustache/MARSMustacheServerService.dproj
index d5adb61d..31093e5b 100644
--- a/Demos/Mustache/MARSMustacheServerService.dproj
+++ b/Demos/Mustache/MARSMustacheServerService.dproj
@@ -1,7 +1,7 @@
{F72901B8-3DC2-48DB-9F80-EE7BA471758C}
- 18.2
+ 18.8
VCL
MARSMustacheServerService.dpr
True
@@ -82,10 +82,10 @@
true
- true
1033
true
false
+ PerMonitor
false
@@ -94,8 +94,8 @@
0
- true
true
+ PerMonitor
@@ -154,7 +154,6 @@
1
- Contents\MacOS
0
@@ -163,6 +162,20 @@
classes
1
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
@@ -175,90 +188,242 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -278,6 +443,11 @@
1
.framework
+
+ Contents\MacOS
+ 1
+ .framework
+
0
@@ -300,6 +470,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.dll;.bpl
@@ -323,6 +498,11 @@
1
.dylib
+
+ Contents\MacOS
+ 1
+ .dylib
+
0
.bpl
@@ -332,6 +512,9 @@
0
+
+ 0
+
0
@@ -345,6 +528,10 @@
Contents\Resources\StartUp\
0
+
+ Contents\Resources\StartUp\
+ 0
+
0
@@ -360,6 +547,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -371,6 +569,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -382,6 +613,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -393,6 +679,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -426,10 +822,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -481,29 +902,51 @@
1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
..\
1
+
+ ..\
+ 1
+
Contents
1
+
+ Contents
+ 1
+
Contents\Resources
1
+
+ Contents\Resources
+ 1
+
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -520,10 +963,20 @@
Contents\MacOS
1
+
+ Contents\MacOS
+ 1
+
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -559,7 +1012,9 @@
+
+
True
diff --git a/Demos/Mustache/Server.Forms.Main.pas b/Demos/Mustache/Server.Forms.Main.pas
index c587bfee..03a5f3cf 100644
--- a/Demos/Mustache/Server.Forms.Main.pas
+++ b/Demos/Mustache/Server.Forms.Main.pas
@@ -44,7 +44,7 @@ implementation
uses
StrUtils, Web.HttpApp
- , MARS.Core.URL, MARS.Core.Engine
+ , MARS.Core.URL, MARS.Core.Engine, MARS.Core.RequestAndResponse.Interfaces
, Server.Ignition;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
@@ -59,7 +59,7 @@ procedure TMainForm.FormCreate(Sender: TObject);
// skip favicon requests (browser)
TServerEngine.Default.BeforeHandleRequest :=
function (const AEngine: TMARSEngine;
- const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const AURL: TMARSURL; const ARequest: IMARSRequest; const AResponse: IMARSResponse;
var Handled: Boolean
): Boolean
begin
diff --git a/Demos/RemoteMic/FMXClient.DataModules.Main.dfm b/Demos/RemoteMic/FMXClient.DataModules.Main.dfm
new file mode 100644
index 00000000..650df259
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.DataModules.Main.dfm
@@ -0,0 +1,25 @@
+object MainDataModule: TMainDataModule
+ OldCreateOrder = False
+ Height = 411
+ Width = 518
+ object MARSApplication: TMARSClientApplication
+ DefaultMediaType = 'application/json'
+ DefaultContentType = 'application/json'
+ Client = MARSClient
+ Left = 88
+ Top = 80
+ end
+ object MARSClient: TMARSNetClient
+ MARSEngineURL = 'http://localhost:8080/rest'
+ ConnectTimeout = 60000
+ ReadTimeout = 60000
+ HttpClient.Asynchronous = False
+ HttpClient.ConnectionTimeout = 60000
+ HttpClient.ResponseTimeout = 60000
+ HttpClient.AllowCookies = True
+ HttpClient.HandleRedirects = True
+ HttpClient.UserAgent = 'Embarcadero URI Client/1.0'
+ Left = 88
+ Top = 24
+ end
+end
diff --git a/Demos/RemoteMic/FMXClient.DataModules.Main.pas b/Demos/RemoteMic/FMXClient.DataModules.Main.pas
new file mode 100644
index 00000000..a4a66361
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.DataModules.Main.pas
@@ -0,0 +1,32 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.DataModules.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Classes, MARS.Client.Application,
+ MARS.Client.Client, MARS.Client.Client.Net
+;
+
+type
+ TMainDataModule = class(TDataModule)
+ MARSApplication: TMARSClientApplication;
+ MARSClient: TMARSNetClient;
+ private
+ public
+ end;
+
+var
+ MainDataModule: TMainDataModule;
+
+implementation
+
+{%CLASSGROUP 'FMX.Controls.TControl'}
+
+{$R *.dfm}
+
+end.
diff --git a/Demos/RemoteMic/FMXClient.DataModules.Main.vlb b/Demos/RemoteMic/FMXClient.DataModules.Main.vlb
new file mode 100644
index 00000000..95e7a6a2
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.DataModules.Main.vlb
@@ -0,0 +1,10 @@
+[MARSApplication]
+Coordinates=150,53,96,33
+
+[]
+Coordinates=71,70,69,33
+Visible=False
+
+[MainForm.BindSourceDB1]
+Coordinates=0,0,144,267
+
diff --git a/Demos/RemoteMic/FMXClient.Forms.Main.fmx b/Demos/RemoteMic/FMXClient.Forms.Main.fmx
new file mode 100644
index 00000000..9990bf0e
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.Forms.Main.fmx
@@ -0,0 +1,27 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS Template Client'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ DesignerMasterStyle = 0
+ object TopToolBar: TToolBar
+ Size.Width = 640.000000000000000000
+ Size.Height = 48.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 0
+ object TitleLabel: TLabel
+ Align = Center
+ AutoSize = True
+ Size.Width = 121.000000000000000000
+ Size.Height = 16.000000000000000000
+ Size.PlatformDefault = False
+ StyleLookup = 'toollabel'
+ TextSettings.WordWrap = False
+ Text = 'MARS Template Client'
+ end
+ end
+end
diff --git a/Demos/RemoteMic/FMXClient.Forms.Main.pas b/Demos/RemoteMic/FMXClient.Forms.Main.pas
new file mode 100644
index 00000000..1b939e4d
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.Forms.Main.pas
@@ -0,0 +1,34 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Layouts, FMX.Controls.Presentation;
+
+type
+ TMainForm = class(TForm)
+ TopToolBar: TToolBar;
+ TitleLabel: TLabel;
+ private
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ FMXClient.DataModules.Main
+ ;
+
+end.
diff --git a/Demos/RemoteMic/FMXClient.Forms.Main.vlb b/Demos/RemoteMic/FMXClient.Forms.Main.vlb
new file mode 100644
index 00000000..b439f67e
--- /dev/null
+++ b/Demos/RemoteMic/FMXClient.Forms.Main.vlb
@@ -0,0 +1,26 @@
+[TopToolBar]
+Coordinates=317,78,82,36
+
+[MainDataModule.ItemsQueryDataSet]
+Coordinates=10,10,228,212
+
+[]
+Coordinates=145,78,71,36
+Visible=True
+
+[TitleLabel]
+Coordinates=236,78,71,58
+
+[MainDataModule.]
+Coordinates=472,428,215,249
+Visible=False
+
+[MainDataModule.EmployeeQuery1]
+Visible=False
+
+[MainDataModule.EmployeeQueryDataSet]
+Coordinates=100,10,253,58
+
+[MainDataModule.CountryByName1]
+Coordinates=10,78,216,58
+
diff --git a/Demos/RemoteMic/RemoteMicClient.dpr b/Demos/RemoteMic/RemoteMicClient.dpr
new file mode 100644
index 00000000..52adba22
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicClient.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
program RemoteMicClient;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ FMXClient.Forms.Main in 'FMXClient.Forms.Main.pas' {MainForm},
+ FMXClient.DataModules.Main in 'FMXClient.DataModules.Main.pas' {MainDataModule: TDataModule};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainDataModule, MainDataModule);
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicClient.dproj b/Demos/RemoteMic/RemoteMicClient.dproj
new file mode 100644
index 00000000..5e28a596
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicClient.dproj
@@ -0,0 +1,1423 @@
+
+
+ {B6B860BA-E3A5-48E9-8EC6-7FE516AE7FC4}
+ RemoteMicClient.dpr
+ True
+ Debug
+ 33937
+ Application
+ FMX
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ RemoteMicClient
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ true
+ Base
+ true
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ RemoteMicServer_Icon.ico
+
+
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ RemoteMicServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+ TDataModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicClient.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ True
+ False
+ True
+ False
+ True
+ False
+ False
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ libRemoteMicClient.so
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ libRemoteMicClient.so
+ true
+
+
+
+
+ true
+
+
+
+
+ classes.dex
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ libRemoteMicClient.so
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicProjectGroup.groupproj b/Demos/RemoteMic/RemoteMicProjectGroup.groupproj
new file mode 100644
index 00000000..bde30c09
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicProjectGroup.groupproj
@@ -0,0 +1,120 @@
+
+
+ {6E23DEFF-F737-42C3-B8AD-2549B8F67C93}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerApacheModule.dpr b/Demos/RemoteMic/RemoteMicServerApacheModule.dpr
new file mode 100644
index 00000000..6185e2cd
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerApacheModule.dpr
@@ -0,0 +1,54 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+library RemoteMicServerApacheModule;
+
+uses
+ {$IFDEF MSWINDOWS}
+ Winapi.ActiveX, System.Win.ComObj,
+ {$ENDIF }
+ Web.WebBroker,
+ Web.ApacheApp,
+ Web.HTTPD24Impl,
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+// httpd.conf entries:
+//
+(*
+ LoadModule marstemplate_module modules/mod_marstemplate.dll
+
+
+ SetHandler mod_marstemplate-handler
+
+*)
+//
+// These entries assume that the output directory for this project is the apache/modules directory.
+//
+// httpd.conf entries should be different if the project is changed in these ways:
+// 1. The TApacheModuleData variable name is changed.
+// 2. The project is renamed.
+// 3. The output directory is not the apache/modules directory.
+// 4. The dynamic library extension depends on a platform. Use .dll on Windows and .so on Linux.
+//
+
+// Declare exported variable so that Apache can access this module.
+var
+ GModuleData: TApacheModuleData;
+exports
+ GModuleData name 'marstemplate_module';
+
+begin
+{$IFDEF MSWINDOWS}
+ CoInitFlags := COINIT_MULTITHREADED;
+{$ENDIF}
+ Web.ApacheApp.InitApplication(@GModuleData);
+ Application.Initialize;
+ Application.WebModuleClass := WebModuleClass;
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerApacheModule.dproj b/Demos/RemoteMic/RemoteMicServerApacheModule.dproj
new file mode 100644
index 00000000..1f6cea83
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerApacheModule.dproj
@@ -0,0 +1,985 @@
+
+
+ {0D982E91-6C92-4321-9078-458448B01536}
+ 18.8
+ None
+ RemoteMicServerApacheModule.dpr
+ True
+ Release
+ Win32
+ 129
+ Library
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ .\lib\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ true
+ RESTComponents;emsclientfiredac;DataSnapFireDAC;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ RemoteMicServerApacheModule
+
+
+ DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;dbexpress;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)
+ true
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ false
+ true
+ 1033
+ (None)
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+ dfm
+ TWebModule
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Library
+
+
+
+ RemoteMicServerApacheModule.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ RemoteMicServerApacheModule.dll
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ libRemoteMicServerApacheModule.so
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ False
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerApplication.dpr b/Demos/RemoteMic/RemoteMicServerApplication.dpr
new file mode 100644
index 00000000..da6b0674
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerApplication.dpr
@@ -0,0 +1,23 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
program RemoteMicServerApplication;
+
+uses
+ Forms,
+ Server.Forms.Main in 'Server.Forms.Main.pas' {MainForm},
+ Server.Resources in 'Server.Resources.pas',
+ Server.Ignition in 'Server.Ignition.pas';
+
+{$R *.res}
+
+begin
+ ReportMemoryLeaksOnShutdown := True;
+
+ Application.Initialize;
+ Application.MainFormOnTaskbar := True;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerApplication.dproj b/Demos/RemoteMic/RemoteMicServerApplication.dproj
new file mode 100644
index 00000000..1ee97abd
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerApplication.dproj
@@ -0,0 +1,190 @@
+
+
+ {0A5E1DDC-90B4-4B41-A7DC-2B0FC45D4349}
+ RemoteMicServerApplication.dpr
+ True
+ Release
+ 3
+ Application
+ VCL
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ RemoteMicServerApplication
+ Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ RemoteMicServer_Icon.ico
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ RemoteMicServer_Icon.ico
+ PerMonitor
+
+
+ true
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicServerApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ True
+ True
+
+
+ 12
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerConsoleApplication.dpr b/Demos/RemoteMic/RemoteMicServerConsoleApplication.dpr
new file mode 100644
index 00000000..78192f3d
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerConsoleApplication.dpr
@@ -0,0 +1,201 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program RemoteMicServerConsoleApplication;
+{$APPTYPE CONSOLE}
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ System.SysUtils,
+ System.Types,
+// IPPeerServer, IPPeerAPI,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ Web.WebReq,
+ Web.WebBroker,
+{$else}
+ SysUtils, StrUtils,
+ Types,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ WebReq,
+ WebBroker,
+{$endif}
+ IdContext,
+ ServerConst in 'ServerConst.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule},
+ Server.Ignition in 'Server.Ignition.pas';
+
+{$R *.res}
+
+type
+ TDummyIndyServer = class
+ public
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+ end;
+
+
+procedure StartServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if not (AServer.Active) then
+ begin
+ AServer.DefaultPort := TServerEngine.Default.Port;
+ Writeln(Format(sStartingServer, [AServer.DefaultPort]));
+ AServer.Active := True;
+ end
+ else
+ Writeln(sServerRunning);
+ Write(cArrow);
+end;
+
+procedure StopServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if AServer.Active then
+ begin
+ Writeln(sStoppingServer);
+ AServer.Active := False;
+ Writeln(sServerStopped);
+ end
+ else
+ Writeln(sServerNotRunning);
+ Write(cArrow);
+end;
+
+procedure SetPort(const AServer: TIdHTTPWebBrokerBridge; const APort: string);
+var
+ LPort: Integer;
+ LWasActive: Boolean;
+begin
+ LPort := StrToIntDef(APort, -1);
+ if LPort = -1 then
+ begin
+ Writeln('Port should be an integer number. Try again.');
+ Exit;
+ end;
+
+ LWasActive := AServer.Active;
+ if LWasActive then
+ StopServer(AServer);
+ TServerEngine.Default.Port := LPort;
+ if LWasActive then
+ StartServer(AServer);
+ Writeln(Format(sPortSet, [IntToStr(TServerEngine.Default.Port)]));
+ Write(cArrow);
+end;
+
+procedure WriteCommands;
+begin
+ Writeln(sCommands);
+ Write(cArrow);
+end;
+
+procedure WriteStatus(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ Writeln(sIndyVersion + AServer.SessionList.Version);
+ Writeln(sActive + BoolToStr(AServer.Active, True));
+ Writeln(sPort + IntToStr(TServerEngine.Default.Port));
+ Write(cArrow);
+end;
+
+procedure SetupThreadScheduler(const AServer: TIdHTTPWebBrokerBridge);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ LScheduler := TIdSchedulerOfThreadPool.Create(AServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ AServer.Scheduler := LScheduler;
+ AServer.MaxConnections := LScheduler.PoolSize;
+ except
+ AServer.Scheduler.DisposeOf;
+ AServer.Scheduler := nil;
+ raise;
+ end;
+end;
+
+procedure RunServer();
+var
+ LServer: TIdHTTPWebBrokerBridge;
+ LDummyIndy: TDummyIndyServer;
+ LResponse: string;
+begin
+ WriteCommands;
+ LDummyIndy := TDummyIndyServer.Create;
+ try
+ LServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ LServer.DefaultPort := TServerEngine.Default.Port;
+ LServer.OnParseAuthentication := LDummyIndy.ParseAuthenticationHandler;
+ {$IFNDEF LINUX}
+ SetupThreadScheduler(LServer);
+ {$ENDIF}
+
+ while True do
+ begin
+ Readln(LResponse);
+ LResponse := LowerCase(LResponse);
+ if sametext(LResponse, cCommandStart) then
+ StartServer(LServer)
+ else if sametext(LResponse, cCommandStatus) then
+ WriteStatus(LServer)
+ else if sametext(LResponse, cCommandStop) then
+ StopServer(LServer)
+ {$ifdef DelphiXE3_UP}
+ else if LResponse.StartsWith(cCommandSetPort, True) then
+ SetPort(LServer, LResponse.Split([' '])[2])
+ {$else}
+ else if AnsiStartsText(cCommandSetPort, LResponse) then
+ SetPort(LServer, Copy(LResponse, Length(cCommandSetPort)+1, MAXINT))
+ {$endif}
+
+ else if sametext(LResponse, cCommandHelp) then
+ WriteCommands
+ else if sametext(LResponse, cCommandExit) then
+ if LServer.Active then
+ begin
+ StopServer(LServer);
+ break
+ end
+ else
+ break
+ else
+ begin
+ Writeln(sInvalidCommand);
+ Write(cArrow);
+ end;
+ end;
+ finally
+ LServer.Free;
+ end;
+ finally
+ LDummyIndy.Free;
+ end;
+end;
+
+{ TDummyIndyServer }
+
+procedure TDummyIndyServer.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+begin
+ try
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+ RunServer();
+ except
+ on E: Exception do
+ Writeln(E.ClassName, ': ', E.Message);
+ end
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerConsoleApplication.dproj b/Demos/RemoteMic/RemoteMicServerConsoleApplication.dproj
new file mode 100644
index 00000000..22bf0b90
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerConsoleApplication.dproj
@@ -0,0 +1,1211 @@
+
+
+ {8EEC8DF2-3740-468A-937A-60168245FB71}
+ RemoteMicServerConsoleApplication.dpr
+ True
+ Release
+ 4229
+ Console
+ None
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ RemoteMicServerConsoleApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ ./bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+ RemoteMicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ RemoteMicServer_Icon.ico
+ (None)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RemoteMicServerConsoleApplication_Icon.ico
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ RemoteMicServer_Icon.ico
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ RemoteMicServer_Icon.ico
+
+
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ RemoteMicServer_Icon.ico
+
+
+
+ MainSource
+
+
+
+
+ TWebModule
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicServerConsoleApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ False
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ RemoteMicServerConsoleApplication
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerDaemon.dpr b/Demos/RemoteMic/RemoteMicServerDaemon.dpr
new file mode 100644
index 00000000..cc63cab7
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerDaemon.dpr
@@ -0,0 +1,21 @@
+program RemoteMicServerDaemon;
+
+{$APPTYPE CONSOLE}
+
+{$R *.res}
+
+uses
+ Classes,
+ SysUtils,
+ {$IFDEF LINUX}
+ MARS.Linux.Daemon in '..\..\Source\MARS.Linux.Daemon.pas',
+ {$ENDIF}
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+begin
+ {$IFDEF LINUX}
+ TMARSDaemon.Current.Name := 'RemoteMicServerDaemon';
+ TMARSDaemon.Current.Start;
+ {$ENDIF}
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerDaemon.dproj b/Demos/RemoteMic/RemoteMicServerDaemon.dproj
new file mode 100644
index 00000000..c8dca5b0
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerDaemon.dproj
@@ -0,0 +1,1161 @@
+
+
+ {9D225C2C-24C2-48B4-8ABE-52C04AF576AE}
+ 18.8
+ None
+ RemoteMicServerDaemon.dpr
+ True
+ Debug
+ Linux64
+ 128
+ Console
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ .\lib\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ RESTComponents;emsclientfiredac;DataSnapFireDAC;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ RemoteMicServerDaemon
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage);$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;dbexpress;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)
+ /usr/bin/xterm -e "%debuggee%"
+ RemoteMicServer_Icon.ico
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ true
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage);$(DCC_UsePackage)
+ true
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;RadiantShapesFmx_Design;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ /usr/bin/xterm -e "%debuggee%"
+
+
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Application
+
+
+
+ RemoteMicServerDaemon.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ RemoteMicServerDaemon
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ False
+ False
+ False
+ False
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerFMXApplication.deployproj b/Demos/RemoteMic/RemoteMicServerFMXApplication.deployproj
new file mode 100644
index 00000000..a082f2d3
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerFMXApplication.deployproj
@@ -0,0 +1,132 @@
+
+
+
+ 12
+
+
+
+
+
+ iPhone5
+
+
+
+
+
+
+ RemoteMicServerFMXApplication\
+ RemoteMicServerFMXApplication.exe
+ ProjectOutput
+ 0
+
+
+ True
+ True
+
+
+
+
+ RemoteMicServerFMXApplication.app\Assets\
+ Logo44x44.png
+ UWP_DelphiLogo44
+ 0
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\MacOS\
+ libcgunwind.1.0.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\MacOS\
+ RemoteMicServerFMXApplication.rsm
+ DebugSymbols
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\..\
+ RemoteMicServerFMXApplication.entitlements
+ ProjectOSXEntitlements
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\Resources\
+ RemoteMicServerFMXApplication.icns
+ ProjectOSXResource
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\
+ Info.plist
+ ProjectOSXInfoPList
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\MacOS\
+ libcgsqlite3.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Assets\
+ Logo150x150.png
+ UWP_DelphiLogo150
+ 0
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\Contents\MacOS\
+ RemoteMicServerFMXApplication
+ ProjectOutput
+ 1
+
+
+ True
+ True
+
+
+
+
+
+ RemoteMicServerFMXApplication.app\
+ libPCRE.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ RemoteMicServerFMXApplication.app\
+ libcgunwind.1.0.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerFMXApplication.dpr b/Demos/RemoteMic/RemoteMicServerFMXApplication.dpr
new file mode 100644
index 00000000..f2bcead0
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerFMXApplication.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program RemoteMicServerFMXApplication;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ Server.FMX.Forms.Main in 'Server.FMX.Forms.Main.pas' {MainForm},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerFMXApplication.dproj b/Demos/RemoteMic/RemoteMicServerFMXApplication.dproj
new file mode 100644
index 00000000..f9609abc
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerFMXApplication.dproj
@@ -0,0 +1,1376 @@
+
+
+ {2DC28130-9EB1-48C8-9CA6-0F3CFD5D8E1D}
+ RemoteMicServerFMXApplication.dpr
+ True
+ Release
+ 38037
+ Application
+ FMX
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ RemoteMicServerFMXApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ true
+ Base
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+ RemoteMicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+ RemoteMicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+ RemoteMicServer_Icon.ico
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServerFMXApplication_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ Debug
+
+
+ true
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+
+
+ true
+ Cfg_1
+ true
+ true
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ RemoteMicServer_Icon.ico
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ RemoteMicServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicServerFMXApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ True
+ False
+ True
+ False
+ True
+ True
+ True
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ RemoteMicServerFMXApplication.exe
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerISAPI.dpr b/Demos/RemoteMic/RemoteMicServerISAPI.dpr
new file mode 100644
index 00000000..b6ce1bde
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerISAPI.dpr
@@ -0,0 +1,30 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+library RemoteMicServerISAPI;
+
+uses
+ Winapi.ActiveX,
+ System.Win.ComObj,
+ Web.WebBroker,
+ Web.Win.ISAPIApp,
+ Web.Win.ISAPIThreadPool,
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+{$R *.res}
+
+exports
+ GetExtensionVersion,
+ HttpExtensionProc,
+ TerminateExtension;
+
+begin
+ CoInitFlags := COINIT_MULTITHREADED;
+ Application.Initialize;
+ Application.WebModuleClass := WebModuleClass;
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerISAPI.dproj b/Demos/RemoteMic/RemoteMicServerISAPI.dproj
new file mode 100644
index 00000000..ae9a8091
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerISAPI.dproj
@@ -0,0 +1,152 @@
+
+
+ {9715EDC7-B308-42F7-B5EF-14BB4698B974}
+ RemoteMicServerISAPI.dpr
+ True
+ Release
+ 1
+ Library
+ None
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ true
+ RemoteMicServerISAPI
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ (None)
+
+
+ RemoteMicServerISAPI_Icon.ico
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ (None)
+
+
+
+ MainSource
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicServerISAPI.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ True
+ False
+
+
+ 12
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServerService.dpr b/Demos/RemoteMic/RemoteMicServerService.dpr
new file mode 100644
index 00000000..2f8b5cc3
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerService.dpr
@@ -0,0 +1,43 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program RemoteMicServerService;
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ Vcl.SvcMgr,
+{$else}
+ SvcMgr,
+{$endif}
+
+ Server.Service in 'Server.Service.pas' {ServerService: TService},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+{$R *.RES}
+
+begin
+ // Windows 2003 Server requires StartServiceCtrlDispatcher to be
+ // called before CoRegisterClassObject, which can be called indirectly
+ // by Application.Initialize. TServiceApplication.DelayInitialize allows
+ // Application.Initialize to be called from TService.Main (after
+ // StartServiceCtrlDispatcher has been called).
+ //
+ // Delayed initialization of the Application object may affect
+ // events which then occur prior to initialization, such as
+ // TService.OnCreate. It is only recommended if the ServiceApplication
+ // registers a class object with OLE and is intended for use with
+ // Windows 2003 Server.
+ //
+ // Application.DelayInitialize := True;
+ //
+ if not Application.DelayInitialize or Application.Installing then
+ Application.Initialize;
+ Application.CreateForm(TServerService, ServerService);
+ Application.Run;
+end.
diff --git a/Demos/RemoteMic/RemoteMicServerService.dproj b/Demos/RemoteMic/RemoteMicServerService.dproj
new file mode 100644
index 00000000..241a9531
--- /dev/null
+++ b/Demos/RemoteMic/RemoteMicServerService.dproj
@@ -0,0 +1,1135 @@
+
+
+ {FEF5DF94-50B0-46F7-9F4B-6C355F140A2F}
+ RemoteMicServerService.dpr
+ True
+ Release
+ 3
+ Application
+ None
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ RemoteMicServerService
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Winapi;$(DCC_Namespace)
+ .\lib\$(Platform)\$(Config)
+ .\bin
+
+
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ RemoteMicServer_Icon.ico
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ MARS.ico
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+ TService
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ RemoteMicServerService.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ True
+ True
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/RemoteMic/RemoteMicServer_Icon.ico b/Demos/RemoteMic/RemoteMicServer_Icon.ico
new file mode 100644
index 00000000..0067d86b
Binary files /dev/null and b/Demos/RemoteMic/RemoteMicServer_Icon.ico differ
diff --git a/Demos/RemoteMic/Server.FMX.Forms.Main.fmx b/Demos/RemoteMic/Server.FMX.Forms.Main.fmx
new file mode 100644
index 00000000..fdadb145
--- /dev/null
+++ b/Demos/RemoteMic/Server.FMX.Forms.Main.fmx
@@ -0,0 +1,66 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS-Curiosity Template Server FMX'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ OnCreate = FormCreate
+ OnClose = FormClose
+ DesignerMasterStyle = 0
+ object Layout1: TLayout
+ Align = Top
+ Size.Width = 640.000000000000000000
+ Size.Height = 121.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 1
+ object PortNumberEdit: TEdit
+ Touch.InteractiveGestures = [LongTap, DoubleTap]
+ TabOrder = 0
+ Text = '8080'
+ Position.X = 109.000000000000000000
+ Position.Y = 22.000000000000000000
+ OnChange = PortNumberEditChange
+ end
+ object Label1: TLabel
+ Position.X = 16.000000000000000000
+ Position.Y = 24.000000000000000000
+ Size.Width = 89.000000000000000000
+ Size.Height = 17.000000000000000000
+ Size.PlatformDefault = False
+ Text = 'Port number:'
+ end
+ object StartButton: TButton
+ Action = StartServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 16.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 2
+ end
+ object StopButton: TButton
+ Action = StopServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 104.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 3
+ end
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Text = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Text = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/RemoteMic/Server.FMX.Forms.Main.pas b/Demos/RemoteMic/Server.FMX.Forms.Main.pas
new file mode 100644
index 00000000..36c1f348
--- /dev/null
+++ b/Demos/RemoteMic/Server.FMX.Forms.Main.pas
@@ -0,0 +1,97 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.FMX.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Controls.Presentation, FMX.Edit, FMX.Layouts, System.Actions, FMX.ActnList
+ , MARS.http.Server.Indy
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ Layout1: TLayout;
+ PortNumberEdit: TEdit;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ private
+ FServer: TMARShttpServerIndy;
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ Web.HttpApp
+ , MARS.Core.URL, MARS.Core.Engine
+ , Server.Ignition;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := TServerEngine.Default.Port.ToString;
+
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerIndy.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/RemoteMic/Server.Forms.Main.dfm b/Demos/RemoteMic/Server.Forms.Main.dfm
new file mode 100644
index 00000000..8f82c254
--- /dev/null
+++ b/Demos/RemoteMic/Server.Forms.Main.dfm
@@ -0,0 +1,83 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'RemoteMic Server'
+ ClientHeight = 202
+ ClientWidth = 464
+ Color = clBtnFace
+ Constraints.MinHeight = 240
+ Constraints.MinWidth = 480
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object TopPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 464
+ Height = 73
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 28
+ Top = 17
+ Width = 63
+ Height = 13
+ Caption = 'Port number:'
+ end
+ object StartButton: TButton
+ Left = 16
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StartServerAction
+ TabOrder = 0
+ end
+ object StopButton: TButton
+ Left = 104
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StopServerAction
+ TabOrder = 1
+ end
+ object PortNumberEdit: TEdit
+ Left = 97
+ Top = 14
+ Width = 82
+ Height = 21
+ TabOrder = 2
+ OnChange = PortNumberEditChange
+ end
+ end
+ object MainTreeView: TTreeView
+ Left = 0
+ Top = 73
+ Width = 464
+ Height = 129
+ Align = alClient
+ Indent = 19
+ TabOrder = 1
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Caption = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Caption = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/RemoteMic/Server.Forms.Main.pas b/Demos/RemoteMic/Server.Forms.Main.pas
new file mode 100644
index 00000000..02062e70
--- /dev/null
+++ b/Demos/RemoteMic/Server.Forms.Main.pas
@@ -0,0 +1,148 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Forms.Main;
+
+{$I MARS.inc}
+
+interface
+
+uses Classes, SysUtils, Forms, ActnList, ComCtrls, StdCtrls, Controls, ExtCtrls
+ , System.Actions
+ , MARS.http.Server.Indy
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ TopPanel: TPanel;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ PortNumberEdit: TEdit;
+ MainTreeView: TTreeView;
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ private
+ FServer: TMARShttpServerIndy;
+ protected
+ procedure RenderEngines(const ATreeView: TTreeView);
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ StrUtils, Web.HttpApp, Windows
+ , MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Registry
+ , MARS.Core.Registry.Utils
+ , Server.Ignition
+;
+
+procedure TMainForm.RenderEngines(const ATreeView: TTreeView);
+begin
+
+ ATreeview.Items.BeginUpdate;
+ try
+ ATreeview.Items.Clear;
+ TMARSEngineRegistry.Instance.EnumerateEngines(
+ procedure (AName: string; AEngine: TMARSEngine)
+ var
+ LEngineItem: TTreeNode;
+ begin
+ LEngineItem := ATreeview.Items.AddChild(nil
+ , AName + ' [ :' + AEngine.Port.ToString + AEngine.BasePath + ']'
+ );
+
+ AEngine.EnumerateApplications(
+ procedure (AName: string; AApplication: TMARSApplication)
+ var
+ LApplicationItem: TTreeNode;
+ begin
+ LApplicationItem := ATreeview.Items.AddChild(LEngineItem
+ , AApplication.Name + ' [' + AApplication.BasePath + ']'
+ );
+
+ AApplication.EnumerateResources(
+ procedure (AName: string; AInfo: TMARSConstructorInfo)
+ begin
+ ATreeview.Items.AddChild(
+ LApplicationItem
+ , AInfo.TypeTClass.ClassName + ' [' + AName + ']'
+ );
+
+ end
+ );
+ end
+ );
+ end
+ );
+
+ if ATreeView.Items.Count > 0 then
+ ATreeView.Items[0].Expand(True);
+ finally
+ ATreeView.Items.EndUpdate;
+ end;
+end;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := IntToStr(TServerEngine.Default.Port);
+ RenderEngines(MainTreeView);
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerIndy.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/RemoteMic/Server.Ignition.pas b/Demos/RemoteMic/Server.Ignition.pas
new file mode 100644
index 00000000..231c33cf
--- /dev/null
+++ b/Demos/RemoteMic/Server.Ignition.pas
@@ -0,0 +1,148 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Ignition;
+
+{$I MARS.inc}
+
+interface
+
+uses
+ System.Classes,
+ System.SysUtils,
+ System.RTTI,
+ System.ZLib,
+ System.StrUtils,
+ MARS.Core.Engine;
+
+type
+ TServerEngine=class
+ private
+ class var FEngine: TMARSEngine;
+{$IFDEF MARS_FIREDAC}
+ class var FAvailableConnectionDefs: TArray;
+{$ENDIF}
+ public
+ class constructor CreateEngine;
+ class destructor DestroyEngine;
+ class property Default: TMARSEngine read FEngine;
+ end;
+
+
+implementation
+
+uses
+ MARS.Core.Activation, MARS.Core.Activation.Interfaces
+ , MARS.Core.Application, MARS.Core.Utils, MARS.Utils.Parameters.IniFile
+ , MARS.Core.MessageBodyWriter, MARS.Core.MessageBodyWriters
+ , MARS.Core.MessageBodyReaders, MARS.Data.MessageBodyWriters
+ {$IFDEF MARS_FIREDAC} , MARS.Data.FireDAC {$ENDIF}
+ {$IFDEF MSWINDOWS} , MARS.mORMotJWT.Token {$ELSE} , MARS.JOSEJWT.Token {$ENDIF}
+ , Server.Resources
+ ;
+
+{ TServerEngine }
+
+class constructor TServerEngine.CreateEngine;
+begin
+ FEngine := TMARSEngine.Create;
+ try
+ // Engine configuration
+ FEngine.Parameters.LoadFromIniFile;
+
+ // Application configuration
+ FEngine.AddApplication('DefaultApp', '/default', [ 'Server.Resources.*']);
+{$IFDEF MARS_FIREDAC}
+ FAvailableConnectionDefs := TMARSFireDAC.LoadConnectionDefs(FEngine.Parameters, 'FireDAC');
+{$ENDIF}
+{$REGION 'BeforeHandleRequest example'}
+(*
+ FEngine.BeforeHandleRequest :=
+ function (const AEngine: TMARSEngine;
+ const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ var Handled: Boolean
+ ): Boolean
+ begin
+ Result := True;
+{
+ // skip favicon requests (browser)
+ if SameText(AURL.Document, 'favicon.ico') then
+ begin
+ Result := False;
+ Handled := True;
+ end;
+}
+{
+ // Handle CORS and PreFlight
+ if SameText(ARequest.Method, 'OPTIONS') then
+ begin
+ Handled := True;
+ Result := False;
+ end;
+}
+ end;
+*)
+{$ENDREGION}
+{$REGION 'Global BeforeInvoke handler example'}
+(*
+ // to execute something before each activation
+ TMARSActivation.RegisterBeforeInvoke(
+ procedure (const AActivation: IMARSActivation; out AIsAllowed: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+{$REGION 'Global AfterInvoke handler example'}
+ // Compression
+ if FEngine.Parameters.ByName('Compression.Enabled').AsBoolean then
+ TMARSActivation.RegisterAfterInvoke(
+ procedure (const AActivation: IMARSActivation)
+ var
+ LOutputStream: TBytesStream;
+ begin
+ if ContainsText(AActivation.Request.GetHeaderParamValue('Accept-Encoding'), 'gzip') then
+ begin
+ LOutputStream := TBytesStream.Create(nil);
+ try
+ ZipStream(AActivation.Response.ContentStream, LOutputStream, 15 + 16);
+ AActivation.Response.ContentStream.Free;
+ AActivation.Response.ContentStream := LOutputStream;
+ AActivation.Response.ContentEncoding := 'gzip';
+ except
+ LOutputStream.Free;
+ raise;
+ end;
+ end;
+ end
+ );
+{$ENDREGION}
+{$REGION 'Global InvokeError handler example'}
+(*
+ // to execute something on error
+ TMARSActivation.RegisterInvokeError(
+ procedure (const AActivation: IMARSActivation; const AException: Exception; var AHandled: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+ except
+ FreeAndNil(FEngine);
+ raise;
+ end;
+end;
+
+class destructor TServerEngine.DestroyEngine;
+begin
+{$IFDEF MARS_FIREDAC}
+ TMARSFireDAC.CloseConnectionDefs(FAvailableConnectionDefs);
+{$ENDIF}
+ FreeAndNil(FEngine);
+end;
+
+end.
diff --git a/Demos/RemoteMic/Server.Resources.pas b/Demos/RemoteMic/Server.Resources.pas
new file mode 100644
index 00000000..56a573f6
--- /dev/null
+++ b/Demos/RemoteMic/Server.Resources.pas
@@ -0,0 +1,119 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Resources;
+
+interface
+
+uses
+ SysUtils, Classes
+
+ , MARS.Core.Attributes, MARS.Core.MediaType, MARS.Core.JSON, MARS.Core.Response
+ , MARS.Core.URL
+
+ , MARS.Core.Token.Resource //, MARS.Core.Token
+;
+
+type
+ [Path('command')]
+ TCommandResource = class
+ private
+ type TApplication = (Skype, Teams, Zoom, Other, Unknown);
+ function GetCurrentApplication: TApplication;
+ protected
+ public
+ [GET, Path('/{param1}/{param2}'), Produces(TMediaType.TEXT_PLAIN)]
+ function Execute([PathParam] param1: Integer; [PathParam] param2: Integer): string;
+ end;
+
+ [Path('token')]
+ TTokenResource = class(TMARSTokenResource)
+ end;
+
+implementation
+
+uses
+ Windows
+, MARS.Core.Registry
+, CodeSiteLogging
+;
+
+{ TCommandResource }
+
+function TCommandResource.GetCurrentApplication: TApplication;
+var
+ LText: array[0..255] of Char;
+ LTitle: string;
+ LHWND: HWND;
+begin
+ Result := Unknown;
+
+ LHWND := GetForegroundWindow;
+ GetWindowText(LHWND, @LText[0], SizeOf(LText));
+ LTitle := LText;
+
+ if LTitle.Contains('Microsoft Teams') then
+ Result := Teams
+ else if LTitle.Contains('Skype') then
+ Result := Skype
+ else if LTitle.Contains('Zoom') then
+ Result := Zoom
+ else
+ Result := Other;
+end;
+
+
+function TCommandResource.Execute(param1: Integer; param2: Integer): string;
+begin
+ if (param1 + param2 < 2) then
+ begin
+ case GetCurrentApplication of
+ Teams: begin
+ Result := 'Teams: toggle mic';
+ SetForegroundWindow(FindWindow(nil, PChar('Microsoft Teams')));
+
+ keybd_event(VK_LCONTROL, $9D,0 , 0); // Press Control
+ keybd_event(VK_LSHIFT, $AA,0 , 0); // Press Shift
+ keybd_event(Ord('M'), Ord('M'), 0 , 0); // Press M
+
+ keybd_event(Ord('M'), Ord('M'), KEYEVENTF_KEYUP , 0); // Release M
+ keybd_event(VK_LSHIFT, $AA, KEYEVENTF_KEYUP, 0); // Release Shift
+ keybd_event(VK_LCONTROL, $9D, KEYEVENTF_KEYUP, 0); // Release Control
+ end;
+ Zoom: begin
+ Result := 'Zoom: toggle mic';
+ SetForegroundWindow(FindWindow(nil, PChar('Zoom')));
+
+ keybd_event(VK_LCONTROL, $9D,0 , 0); // Press Control
+ keybd_event(VK_LSHIFT, $AA,0 , 0); // Press Shift
+ keybd_event(Ord('A'), Ord('A'), 0 , 0); // Press A
+
+ keybd_event(Ord('A'), Ord('A'), KEYEVENTF_KEYUP , 0); // Release A
+ keybd_event(VK_LSHIFT, $AA, KEYEVENTF_KEYUP, 0); // Release Shift
+ keybd_event(VK_LCONTROL, $9D, KEYEVENTF_KEYUP, 0); // Release Control
+ end;
+ Skype: begin
+ Result := 'Skype: toggle mic';
+ SetForegroundWindow(FindWindow(nil, PChar('Skype')));
+
+ keybd_event(VK_LCONTROL, $9D,0 , 0); // Press Control
+ keybd_event(Ord('M'), Ord('M'), 0 , 0); // Press M
+
+ keybd_event(Ord('M'), Ord('M'), KEYEVENTF_KEYUP , 0); // Release M
+ keybd_event(VK_LSHIFT, $AA, KEYEVENTF_KEYUP, 0); // Release Shift
+ keybd_event(VK_LCONTROL, $9D, KEYEVENTF_KEYUP, 0); // Release Control
+ end;
+ else
+ Result := 'Other app';
+ end;
+
+ CodeSite.SendMsg(Result);
+ end;
+end;
+
+initialization
+ TMARSResourceRegistry.Instance.RegisterResource;
+ TMARSResourceRegistry.Instance.RegisterResource;
+end.
diff --git a/Demos/RemoteMic/Server.Service.dfm b/Demos/RemoteMic/Server.Service.dfm
new file mode 100644
index 00000000..52cc889a
--- /dev/null
+++ b/Demos/RemoteMic/Server.Service.dfm
@@ -0,0 +1,10 @@
+object ServerService: TServerService
+ OldCreateOrder = False
+ OnCreate = ServiceCreate
+ OnDestroy = ServiceDestroy
+ DisplayName = 'RemoteMic Service'
+ OnStart = ServiceStart
+ OnStop = ServiceStop
+ Height = 150
+ Width = 215
+end
diff --git a/Demos/RemoteMic/Server.Service.pas b/Demos/RemoteMic/Server.Service.pas
new file mode 100644
index 00000000..5f65d9ca
--- /dev/null
+++ b/Demos/RemoteMic/Server.Service.pas
@@ -0,0 +1,126 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Service;
+
+{$I MARS.inc}
+
+interface
+
+uses
+{$ifdef DelphiXE3_UP}
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics
+, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, Web.WebReq, Web.WebBroker
+{$else}
+ Windows, Messages, SysUtils, Classes, Graphics
+, Controls, SvcMgr, Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, WebReq, WebBroker
+{$endif}
+, IdContext
+;
+
+type
+ TServerService = class(TService)
+ procedure ServiceCreate(Sender: TObject);
+ procedure ServiceDestroy(Sender: TObject);
+ procedure ServiceStart(Sender: TService; var Started: Boolean);
+ procedure ServiceStop(Sender: TService; var Stopped: Boolean);
+ private
+ FServer: TIdHTTPWebBrokerBridge;
+
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+
+ public
+ function GetServiceController: TServiceController; override;
+
+ const DEFAULT_PORT = 8080;
+ end;
+
+var
+ ServerService: TServerService;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ IdSchedulerOfThreadPool
+, Server.Ignition
+, Server.WebModule
+;
+
+procedure ServiceController(CtrlCode: DWord); stdcall;
+begin
+ ServerService.Controller(CtrlCode);
+end;
+
+function TServerService.GetServiceController: TServiceController;
+begin
+ Result := ServiceController;
+end;
+
+procedure TServerService.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+procedure TServerService.ServiceCreate(Sender: TObject);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ Name := TServerEngine.Default.Parameters.ByNameText('ServiceName', Name).AsString;
+ DisplayName := TServerEngine.Default.Parameters.ByNameText('ServiceDisplayName', DisplayName).AsString;
+
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+
+ FServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+
+ LScheduler := TIdSchedulerOfThreadPool.Create(FServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ FServer.Scheduler := LScheduler;
+ FServer.MaxConnections := LScheduler.PoolSize;
+ FServer.OnParseAuthentication := ParseAuthenticationHandler;
+ except
+ FServer.Scheduler.Free;
+ FServer.Scheduler := nil;
+ raise;
+ end;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TServerService.ServiceDestroy(Sender: TObject);
+begin
+ FreeAndNil(FServer);
+end;
+
+procedure TServerService.ServiceStart(Sender: TService; var Started: Boolean);
+begin
+ FServer.Active := True;
+ Started := FServer.Active;
+end;
+
+procedure TServerService.ServiceStop(Sender: TService; var Stopped: Boolean);
+begin
+ FServer.Active := False;
+ Stopped := not FServer.Active;
+end;
+
+end.
diff --git a/Demos/RemoteMic/Server.WebModule.dfm b/Demos/RemoteMic/Server.WebModule.dfm
new file mode 100644
index 00000000..cfa79a10
--- /dev/null
+++ b/Demos/RemoteMic/Server.WebModule.dfm
@@ -0,0 +1,12 @@
+object ServerWebModule: TServerWebModule
+ OldCreateOrder = False
+ Actions = <
+ item
+ Default = True
+ Name = 'DefaultHandler'
+ PathInfo = '/'
+ OnAction = ServerWebModuleDefaultHandlerAction
+ end>
+ Height = 230
+ Width = 415
+end
diff --git a/Demos/RemoteMic/Server.WebModule.pas b/Demos/RemoteMic/Server.WebModule.pas
new file mode 100644
index 00000000..2ad473c8
--- /dev/null
+++ b/Demos/RemoteMic/Server.WebModule.pas
@@ -0,0 +1,57 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.WebModule;
+
+{$I MARS.inc}
+
+interface
+
+uses System.SysUtils, System.Classes, Web.HTTPApp;
+
+type
+ TServerWebModule = class(TWebModule)
+ procedure ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ WebModuleClass: TComponentClass = TServerWebModule;
+
+implementation
+
+{%CLASSGROUP 'System.Classes.TPersistent'}
+
+{$R *.dfm}
+
+uses
+ MARS.http.Server.Indy
+, Server.Ignition;
+
+procedure TServerWebModule.ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ inherited;
+
+ if not TServerEngine.Default.HandleRequest(TMARSWebRequest.Create(Request), TMARSWebResponse.Create(Response)) then
+ begin
+ Response.ContentType := 'application/json';
+ Response.Content :=
+ '{"success": false, "details": '
+ + '{'
+ + '"error": "Request not found",'
+ + '"pathinfo": "' + Request.PathInfo + '"'
+ + '}'
+ + '}';
+ end
+ else
+ Handled := True;
+end;
+
+end.
diff --git a/Demos/RemoteMic/ServerConst.pas b/Demos/RemoteMic/ServerConst.pas
new file mode 100644
index 00000000..2ddaea07
--- /dev/null
+++ b/Demos/RemoteMic/ServerConst.pas
@@ -0,0 +1,42 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit ServerConst;
+
+interface
+
+resourcestring
+ sPortInUse = '- Error: Port %s already in use';
+ sPortSet = '- Port set to %s';
+ sServerRunning = '- The Server is already running';
+ sStartingServer = '- Starting HTTP Server on port %d';
+ sStoppingServer = '- Stopping Server';
+ sServerStopped = '- Server Stopped';
+ sServerNotRunning = '- The Server is not running';
+ sInvalidCommand = '- Error: Invalid Command';
+ sIndyVersion = '- Indy Version: ';
+ sActive = '- Active: ';
+ sPort = '- Port: ';
+ sSessionID = '- Session ID CookieName: ';
+ sCommands = 'Enter a Command: ' + slineBreak +
+ ' - "start" to start the server'+ slineBreak +
+ ' - "stop" to stop the server'+ slineBreak +
+ ' - "set port" to change the default port'+ slineBreak +
+ ' - "status" for Server status'+ slineBreak +
+ ' - "help" to show commands'+ slineBreak +
+ ' - "exit" to close the application';
+
+const
+ cArrow = '->';
+ cCommandStart = 'start';
+ cCommandStop = 'stop';
+ cCommandStatus = 'status';
+ cCommandHelp = 'help';
+ cCommandSetPort = 'set port';
+ cCommandExit = 'exit';
+
+implementation
+
+end.
diff --git a/Demos/RemoteMic/bin/RemoteMicServerApplication.ini b/Demos/RemoteMic/bin/RemoteMicServerApplication.ini
new file mode 100644
index 00000000..861a0b58
--- /dev/null
+++ b/Demos/RemoteMic/bin/RemoteMicServerApplication.ini
@@ -0,0 +1,4 @@
+[DefaultEngine]
+BasePath=
+ThreadPoolSize=100
+;Compression.Enabled=True
diff --git a/Demos/UniDAC Basic/FMXClient.DataModules.Main.dfm b/Demos/UniDAC Basic/FMXClient.DataModules.Main.dfm
new file mode 100644
index 00000000..650df259
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.DataModules.Main.dfm
@@ -0,0 +1,25 @@
+object MainDataModule: TMainDataModule
+ OldCreateOrder = False
+ Height = 411
+ Width = 518
+ object MARSApplication: TMARSClientApplication
+ DefaultMediaType = 'application/json'
+ DefaultContentType = 'application/json'
+ Client = MARSClient
+ Left = 88
+ Top = 80
+ end
+ object MARSClient: TMARSNetClient
+ MARSEngineURL = 'http://localhost:8080/rest'
+ ConnectTimeout = 60000
+ ReadTimeout = 60000
+ HttpClient.Asynchronous = False
+ HttpClient.ConnectionTimeout = 60000
+ HttpClient.ResponseTimeout = 60000
+ HttpClient.AllowCookies = True
+ HttpClient.HandleRedirects = True
+ HttpClient.UserAgent = 'Embarcadero URI Client/1.0'
+ Left = 88
+ Top = 24
+ end
+end
diff --git a/Demos/UniDAC Basic/FMXClient.DataModules.Main.pas b/Demos/UniDAC Basic/FMXClient.DataModules.Main.pas
new file mode 100644
index 00000000..a4a66361
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.DataModules.Main.pas
@@ -0,0 +1,32 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.DataModules.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Classes, MARS.Client.Application,
+ MARS.Client.Client, MARS.Client.Client.Net
+;
+
+type
+ TMainDataModule = class(TDataModule)
+ MARSApplication: TMARSClientApplication;
+ MARSClient: TMARSNetClient;
+ private
+ public
+ end;
+
+var
+ MainDataModule: TMainDataModule;
+
+implementation
+
+{%CLASSGROUP 'FMX.Controls.TControl'}
+
+{$R *.dfm}
+
+end.
diff --git a/Demos/UniDAC Basic/FMXClient.DataModules.Main.vlb b/Demos/UniDAC Basic/FMXClient.DataModules.Main.vlb
new file mode 100644
index 00000000..95e7a6a2
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.DataModules.Main.vlb
@@ -0,0 +1,10 @@
+[MARSApplication]
+Coordinates=150,53,96,33
+
+[]
+Coordinates=71,70,69,33
+Visible=False
+
+[MainForm.BindSourceDB1]
+Coordinates=0,0,144,267
+
diff --git a/Demos/UniDAC Basic/FMXClient.Forms.Main.fmx b/Demos/UniDAC Basic/FMXClient.Forms.Main.fmx
new file mode 100644
index 00000000..9990bf0e
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.Forms.Main.fmx
@@ -0,0 +1,27 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS Template Client'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ DesignerMasterStyle = 0
+ object TopToolBar: TToolBar
+ Size.Width = 640.000000000000000000
+ Size.Height = 48.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 0
+ object TitleLabel: TLabel
+ Align = Center
+ AutoSize = True
+ Size.Width = 121.000000000000000000
+ Size.Height = 16.000000000000000000
+ Size.PlatformDefault = False
+ StyleLookup = 'toollabel'
+ TextSettings.WordWrap = False
+ Text = 'MARS Template Client'
+ end
+ end
+end
diff --git a/Demos/UniDAC Basic/FMXClient.Forms.Main.pas b/Demos/UniDAC Basic/FMXClient.Forms.Main.pas
new file mode 100644
index 00000000..1b939e4d
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.Forms.Main.pas
@@ -0,0 +1,34 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit FMXClient.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Layouts, FMX.Controls.Presentation;
+
+type
+ TMainForm = class(TForm)
+ TopToolBar: TToolBar;
+ TitleLabel: TLabel;
+ private
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ FMXClient.DataModules.Main
+ ;
+
+end.
diff --git a/Demos/UniDAC Basic/FMXClient.Forms.Main.vlb b/Demos/UniDAC Basic/FMXClient.Forms.Main.vlb
new file mode 100644
index 00000000..b439f67e
--- /dev/null
+++ b/Demos/UniDAC Basic/FMXClient.Forms.Main.vlb
@@ -0,0 +1,26 @@
+[TopToolBar]
+Coordinates=317,78,82,36
+
+[MainDataModule.ItemsQueryDataSet]
+Coordinates=10,10,228,212
+
+[]
+Coordinates=145,78,71,36
+Visible=True
+
+[TitleLabel]
+Coordinates=236,78,71,58
+
+[MainDataModule.]
+Coordinates=472,428,215,249
+Visible=False
+
+[MainDataModule.EmployeeQuery1]
+Visible=False
+
+[MainDataModule.EmployeeQueryDataSet]
+Coordinates=100,10,253,58
+
+[MainDataModule.CountryByName1]
+Coordinates=10,78,216,58
+
diff --git a/Demos/UniDAC Basic/Server.FMX.Forms.Main.fmx b/Demos/UniDAC Basic/Server.FMX.Forms.Main.fmx
new file mode 100644
index 00000000..fdadb145
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.FMX.Forms.Main.fmx
@@ -0,0 +1,66 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'MARS-Curiosity Template Server FMX'
+ ClientHeight = 480
+ ClientWidth = 640
+ FormFactor.Width = 320
+ FormFactor.Height = 480
+ FormFactor.Devices = [Desktop]
+ OnCreate = FormCreate
+ OnClose = FormClose
+ DesignerMasterStyle = 0
+ object Layout1: TLayout
+ Align = Top
+ Size.Width = 640.000000000000000000
+ Size.Height = 121.000000000000000000
+ Size.PlatformDefault = False
+ TabOrder = 1
+ object PortNumberEdit: TEdit
+ Touch.InteractiveGestures = [LongTap, DoubleTap]
+ TabOrder = 0
+ Text = '8080'
+ Position.X = 109.000000000000000000
+ Position.Y = 22.000000000000000000
+ OnChange = PortNumberEditChange
+ end
+ object Label1: TLabel
+ Position.X = 16.000000000000000000
+ Position.Y = 24.000000000000000000
+ Size.Width = 89.000000000000000000
+ Size.Height = 17.000000000000000000
+ Size.PlatformDefault = False
+ Text = 'Port number:'
+ end
+ object StartButton: TButton
+ Action = StartServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 16.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 2
+ end
+ object StopButton: TButton
+ Action = StopServerAction
+ Enabled = True
+ ImageIndex = -1
+ Position.X = 104.000000000000000000
+ Position.Y = 64.000000000000000000
+ TabOrder = 3
+ end
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Text = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Text = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/UniDAC Basic/Server.FMX.Forms.Main.pas b/Demos/UniDAC Basic/Server.FMX.Forms.Main.pas
new file mode 100644
index 00000000..36c1f348
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.FMX.Forms.Main.pas
@@ -0,0 +1,97 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.FMX.Forms.Main;
+
+interface
+
+uses
+ System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
+ FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
+ FMX.Controls.Presentation, FMX.Edit, FMX.Layouts, System.Actions, FMX.ActnList
+ , MARS.http.Server.Indy
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ Layout1: TLayout;
+ PortNumberEdit: TEdit;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ private
+ FServer: TMARShttpServerIndy;
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.fmx}
+
+uses
+ Web.HttpApp
+ , MARS.Core.URL, MARS.Core.Engine
+ , Server.Ignition;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := TServerEngine.Default.Port.ToString;
+
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerIndy.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/UniDAC Basic/Server.Forms.Main.dfm b/Demos/UniDAC Basic/Server.Forms.Main.dfm
new file mode 100644
index 00000000..5220be6e
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Forms.Main.dfm
@@ -0,0 +1,83 @@
+object MainForm: TMainForm
+ Left = 0
+ Top = 0
+ Caption = 'UniDACBasic Server'
+ ClientHeight = 201
+ ClientWidth = 464
+ Color = clBtnFace
+ Constraints.MinHeight = 240
+ Constraints.MinWidth = 480
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object TopPanel: TPanel
+ Left = 0
+ Top = 0
+ Width = 464
+ Height = 73
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label1: TLabel
+ Left = 28
+ Top = 17
+ Width = 63
+ Height = 13
+ Caption = 'Port number:'
+ end
+ object StartButton: TButton
+ Left = 16
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StartServerAction
+ TabOrder = 0
+ end
+ object StopButton: TButton
+ Left = 104
+ Top = 41
+ Width = 75
+ Height = 25
+ Action = StopServerAction
+ TabOrder = 1
+ end
+ object PortNumberEdit: TEdit
+ Left = 97
+ Top = 14
+ Width = 82
+ Height = 21
+ TabOrder = 2
+ OnChange = PortNumberEditChange
+ end
+ end
+ object MainTreeView: TTreeView
+ Left = 0
+ Top = 73
+ Width = 464
+ Height = 128
+ Align = alClient
+ Indent = 19
+ TabOrder = 1
+ end
+ object MainActionList: TActionList
+ Left = 384
+ Top = 24
+ object StartServerAction: TAction
+ Caption = 'Start Server'
+ OnExecute = StartServerActionExecute
+ OnUpdate = StartServerActionUpdate
+ end
+ object StopServerAction: TAction
+ Caption = 'Stop Server'
+ OnExecute = StopServerActionExecute
+ OnUpdate = StopServerActionUpdate
+ end
+ end
+end
diff --git a/Demos/UniDAC Basic/Server.Forms.Main.pas b/Demos/UniDAC Basic/Server.Forms.Main.pas
new file mode 100644
index 00000000..7bf3579a
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Forms.Main.pas
@@ -0,0 +1,148 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Forms.Main;
+
+{$I MARS.inc}
+
+interface
+
+uses Classes, SysUtils, Forms, ActnList, ComCtrls, StdCtrls, Controls, ExtCtrls
+ , System.Actions
+ , MARS.http.Server.Indy
+;
+
+type
+ TMainForm = class(TForm)
+ MainActionList: TActionList;
+ StartServerAction: TAction;
+ StopServerAction: TAction;
+ TopPanel: TPanel;
+ Label1: TLabel;
+ StartButton: TButton;
+ StopButton: TButton;
+ PortNumberEdit: TEdit;
+ MainTreeView: TTreeView;
+ procedure StartServerActionExecute(Sender: TObject);
+ procedure StartServerActionUpdate(Sender: TObject);
+ procedure StopServerActionExecute(Sender: TObject);
+ procedure StopServerActionUpdate(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure PortNumberEditChange(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ private
+ FServer: TMARShttpServerIndy;
+ protected
+ procedure RenderEngines(const ATreeView: TTreeView);
+ public
+ end;
+
+var
+ MainForm: TMainForm;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ StrUtils, Web.HttpApp
+ , MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Registry
+ , MARS.Core.Registry.Utils
+ , Server.Ignition
+;
+
+procedure TMainForm.RenderEngines(const ATreeView: TTreeView);
+begin
+
+ ATreeview.Items.BeginUpdate;
+ try
+ ATreeview.Items.Clear;
+ TMARSEngineRegistry.Instance.EnumerateEngines(
+ procedure (AName: string; AEngine: TMARSEngine)
+ var
+ LEngineItem: TTreeNode;
+ begin
+ LEngineItem := ATreeview.Items.AddChild(nil
+ , AName + ' [ :' + AEngine.Port.ToString + AEngine.BasePath + ']'
+ );
+
+ AEngine.EnumerateApplications(
+ procedure (AName: string; AApplication: TMARSApplication)
+ var
+ LApplicationItem: TTreeNode;
+ begin
+ LApplicationItem := ATreeview.Items.AddChild(LEngineItem
+ , AApplication.Name + ' [' + AApplication.BasePath + ']'
+ );
+
+ AApplication.EnumerateResources(
+ procedure (AName: string; AInfo: TMARSConstructorInfo)
+ begin
+ ATreeview.Items.AddChild(
+ LApplicationItem
+ , AInfo.TypeTClass.ClassName + ' [' + AName + ']'
+ );
+
+ end
+ );
+ end
+ );
+ end
+ );
+
+ if ATreeView.Items.Count > 0 then
+ ATreeView.Items[0].Expand(True);
+ finally
+ ATreeView.Items.EndUpdate;
+ end;
+end;
+
+procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ StopServerAction.Execute;
+end;
+
+procedure TMainForm.FormCreate(Sender: TObject);
+begin
+ PortNumberEdit.Text := IntToStr(TServerEngine.Default.Port);
+ RenderEngines(MainTreeView);
+ StartServerAction.Execute;
+end;
+
+procedure TMainForm.PortNumberEditChange(Sender: TObject);
+begin
+ TServerEngine.Default.Port := StrToInt(PortNumberEdit.Text);
+end;
+
+procedure TMainForm.StartServerActionExecute(Sender: TObject);
+begin
+ // http server implementation
+ FServer := TMARShttpServerIndy.Create(TServerEngine.Default);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+ FServer.Active := True;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TMainForm.StartServerActionUpdate(Sender: TObject);
+begin
+ StartServerAction.Enabled := (FServer = nil) or (FServer.Active = False);
+end;
+
+procedure TMainForm.StopServerActionExecute(Sender: TObject);
+begin
+ FServer.Active := False;
+ FreeAndNil(FServer);
+end;
+
+procedure TMainForm.StopServerActionUpdate(Sender: TObject);
+begin
+ StopServerAction.Enabled := Assigned(FServer) and (FServer.Active = True);
+end;
+
+end.
diff --git a/Demos/UniDAC Basic/Server.Ignition.pas b/Demos/UniDAC Basic/Server.Ignition.pas
new file mode 100644
index 00000000..9565ce8c
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Ignition.pas
@@ -0,0 +1,149 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Ignition;
+
+{$I MARS.inc}
+
+interface
+
+uses
+ Classes, SysUtils, Rtti
+ , MARS.Core.Engine
+;
+
+type
+ TServerEngine=class
+ private
+ class var FEngine: TMARSEngine;
+{$IF Defined(MARS_FIREDAC) or Defined(MARS_UNIDAC)}
+ class var FAvailableConnectionDefs: TArray;
+{$ENDIF}
+ public
+ class constructor CreateEngine;
+ class destructor DestroyEngine;
+ class property Default: TMARSEngine read FEngine;
+ end;
+
+
+implementation
+
+uses
+ MARS.Core.Activation, MARS.Core.Activation.Interfaces
+ , MARS.Core.Application, MARS.Core.Utils, MARS.Utils.Parameters.IniFile
+ , MARS.Core.MessageBodyWriter, MARS.Core.MessageBodyWriters
+ , MARS.Core.MessageBodyReaders, MARS.Data.MessageBodyWriters
+ {$IFDEF MARS_FIREDAC}
+ , MARS.Data.FireDAC
+ , FireDAC.Phys.FB
+ {$ENDIF}
+ {$IFDEF MARS_UNIDAC}
+ , MARS.Data.UniDAC
+ , InterBaseUniProvider // Interbase & FirebirdSQL
+ , SQLiteUniProvider // SQLite
+ {$ENDIF}
+ {$IFDEF MSWINDOWS} , MARS.mORMotJWT.Token {$ELSE} , MARS.JOSEJWT.Token {$ENDIF}
+ , Server.Resources
+
+ ;
+
+{ TServerEngine }
+
+class constructor TServerEngine.CreateEngine;
+begin
+ FEngine := TMARSEngine.Create;
+ try
+ // Engine configuration
+ FEngine.Parameters.LoadFromIniFile;
+
+ // Application configuration
+ FEngine.AddApplication('DefaultApp', '/default', [ 'Server.Resources.*']);
+{$IFDEF MARS_FIREDAC}
+ FAvailableConnectionDefs := TMARSFireDAC.LoadConnectionDefs(FEngine.Parameters, 'FireDAC');
+{$ENDIF}
+{$IFDEF MARS_UNIDAC}
+ FAvailableConnectionDefs := TMARSUniDAC.LoadConnectionDefs(FEngine.Parameters, 'UniDAC');
+{$ENDIF}
+
+{$REGION 'BeforeHandleRequest example'}
+(*
+ FEngine.BeforeHandleRequest :=
+ function (const AEngine: TMARSEngine;
+ const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ var Handled: Boolean
+ ): Boolean
+ begin
+ Result := True;
+{
+ // skip favicon requests (browser)
+ if SameText(AURL.Document, 'favicon.ico') then
+ begin
+ Result := False;
+ Handled := True;
+ end;
+}
+{
+ // Handle CORS and PreFlight
+ if SameText(ARequest.Method, 'OPTIONS') then
+ begin
+ Handled := True;
+ Result := False;
+ end;
+}
+ end;
+*)
+{$ENDREGION}
+{$REGION 'Global BeforeInvoke handler example'}
+(*
+ // to execute something before each activation
+ TMARSActivation.RegisterBeforeInvoke(
+ procedure (const AActivation: IMARSActivation; out AIsAllowed: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+{$REGION 'Global AfterInvoke handler example'}
+(*
+ // to execute something after each activation
+ TMARSActivation.RegisterAfterInvoke(
+ procedure (const AActivation: IMARSActivation)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+{$REGION 'Global InvokeError handler example'}
+(*
+ // to execute something on error
+ TMARSActivation.RegisterInvokeError(
+ procedure (const AActivation: IMARSActivation; const AException: Exception; var AHandled: Boolean)
+ begin
+
+ end
+ );
+*)
+{$ENDREGION}
+ except
+ FreeAndNil(FEngine);
+ raise;
+ end;
+end;
+
+class destructor TServerEngine.DestroyEngine;
+begin
+{$IFDEF MARS_FIREDAC}
+ TMARSFireDAC.CloseConnectionDefs(FAvailableConnectionDefs);
+{$ENDIF}
+{$IFDEF MARS_UNIDAC}
+ TMARSUniDAC.CloseConnectionDefs(FAvailableConnectionDefs);
+{$ENDIF}
+
+ FreeAndNil(FEngine);
+end;
+
+end.
diff --git a/Demos/UniDAC Basic/Server.Resources.pas b/Demos/UniDAC Basic/Server.Resources.pas
new file mode 100644
index 00000000..b8ba835b
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Resources.pas
@@ -0,0 +1,107 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Resources;
+
+interface
+
+uses
+ SysUtils, Classes, Data.DB
+
+ , MARS.Core.Attributes, MARS.Core.MediaType, MARS.Core.JSON, MARS.Core.Response
+ , MARS.Core.URL
+
+ , MARS.Core.Token.Resource //, MARS.Core.Token
+
+ // UniDAC
+ , Uni, VirtualTable
+ , MARS.Data.UniDAC, MARS.Data.UniDAC.Utils
+
+ , FireDAC.Comp.Client, MARS.Data.FireDAC
+;
+
+type
+ [ Path('helloworld')
+ , Produces(TMediaType.APPLICATION_XML)
+ , Produces(TMediaType.APPLICATION_JSON)
+ , Produces(APPLICATION_JSON_UniDAC)
+ , Produces(TMediaType.APPLICATION_OCTET_STREAM)
+ ]
+ THelloWorldResource = class
+ protected
+ [Context] UD: TMARSUniDAC;
+ [Context] FD: TMARSFireDAC;
+ [Context, Connection('MY_SQLITE')] UDSQLite: TMARSUniDAC;
+ public
+ [GET, Path('query/{tablename}')]
+ function GetEmployee: TUniQuery;
+ [GET, Path('queryFD/{tablename}')]
+ function GetEmployeeFD: TFDQuery;
+
+ [GET, Path('querySQLite/{tablename}')]
+ function GetTable1: TUniQuery;
+ [GET, Path('queries')]
+ function GetQueries: TArray;
+
+ [GET, Path('virtualtable')]
+ function GetVirtualTable: TVirtualTable;
+ end;
+
+ [Path('token')]
+ TTokenResource = class(TMARSTokenResource)
+ end;
+
+implementation
+
+uses
+ MARS.Core.Registry
+;
+
+{ THelloWorldResource }
+
+function THelloWorldResource.GetEmployee: TUniQuery;
+begin
+ Result := UD.Query('select * from &PathParam_tablename');
+end;
+
+
+function THelloWorldResource.GetEmployeeFD: TFDQuery;
+begin
+ Result := FD.Query('select * from &PathParam_tablename');
+end;
+
+function THelloWorldResource.GetQueries: TArray;
+begin
+ Result := [
+ UD.SetName(UD.Query('select * from EMPLOYEE'), 'Employees')
+ , UDSQLite.SetName( UDSQLite.Query('select * from MYTABLE1'), 'MyTable1')
+ ];
+end;
+
+function THelloWorldResource.GetTable1: TUniQuery;
+begin
+ Result := UDSQLite.Query('select * from &PathParam_tablename');
+end;
+
+function THelloWorldResource.GetVirtualTable: TVirtualTable;
+begin
+ Result := TVirtualTable.Create(nil);
+ try
+ Result.AddField('Lastname', ftString, 100);
+ Result.AddField('Firstname', ftString, 100);
+ Result.AddField('DateOfBirth', ftDate);
+
+ Result.Active := True;
+ Result.AppendRecord(['Magni', 'Andrea', EncodeDate(1982, 05, 24)]);
+ Result.AppendRecord(['K', 'Ertan', EncodeDate(2000, 01, 01)]);
+ except
+ FreeAndNil(Result);
+ end;
+end;
+
+initialization
+ TMARSResourceRegistry.Instance.RegisterResource;
+ TMARSResourceRegistry.Instance.RegisterResource;
+end.
diff --git a/Demos/UniDAC Basic/Server.Service.dfm b/Demos/UniDAC Basic/Server.Service.dfm
new file mode 100644
index 00000000..012a74e0
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Service.dfm
@@ -0,0 +1,10 @@
+object ServerService: TServerService
+ OldCreateOrder = False
+ OnCreate = ServiceCreate
+ OnDestroy = ServiceDestroy
+ DisplayName = 'UniDACBasic Service'
+ OnStart = ServiceStart
+ OnStop = ServiceStop
+ Height = 150
+ Width = 215
+end
diff --git a/Demos/UniDAC Basic/Server.Service.pas b/Demos/UniDAC Basic/Server.Service.pas
new file mode 100644
index 00000000..d47167bd
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.Service.pas
@@ -0,0 +1,123 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.Service;
+
+{$I MARS.inc}
+
+interface
+
+uses
+{$ifdef DelphiXE3_UP}
+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics
+, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, Web.WebReq, Web.WebBroker
+{$else}
+ Windows, Messages, SysUtils, Classes, Graphics
+, Controls, SvcMgr, Dialogs
+//, IPPeerServer, IPPeerAPI
+, IdHTTPWebBrokerBridge, WebReq, WebBroker
+{$endif}
+, IdContext
+;
+
+type
+ TServerService = class(TService)
+ procedure ServiceCreate(Sender: TObject);
+ procedure ServiceDestroy(Sender: TObject);
+ procedure ServiceStart(Sender: TService; var Started: Boolean);
+ procedure ServiceStop(Sender: TService; var Stopped: Boolean);
+ private
+ FServer: TIdHTTPWebBrokerBridge;
+
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+
+ public
+ function GetServiceController: TServiceController; override;
+
+ const DEFAULT_PORT = 8080;
+ end;
+
+var
+ ServerService: TServerService;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ IdSchedulerOfThreadPool
+, Server.Ignition
+, Server.WebModule
+;
+
+procedure ServiceController(CtrlCode: DWord); stdcall;
+begin
+ ServerService.Controller(CtrlCode);
+end;
+
+function TServerService.GetServiceController: TServiceController;
+begin
+ Result := ServiceController;
+end;
+
+procedure TServerService.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+procedure TServerService.ServiceCreate(Sender: TObject);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+
+ FServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ FServer.DefaultPort := TServerEngine.Default.Port;
+
+ LScheduler := TIdSchedulerOfThreadPool.Create(FServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ FServer.Scheduler := LScheduler;
+ FServer.MaxConnections := LScheduler.PoolSize;
+ FServer.OnParseAuthentication := ParseAuthenticationHandler;
+ except
+ FServer.Scheduler.Free;
+ FServer.Scheduler := nil;
+ raise;
+ end;
+ except
+ FServer.Free;
+ raise;
+ end;
+end;
+
+procedure TServerService.ServiceDestroy(Sender: TObject);
+begin
+ FreeAndNil(FServer);
+end;
+
+procedure TServerService.ServiceStart(Sender: TService; var Started: Boolean);
+begin
+ FServer.Active := True;
+ Started := FServer.Active;
+end;
+
+procedure TServerService.ServiceStop(Sender: TService; var Stopped: Boolean);
+begin
+ FServer.Active := False;
+ Stopped := not FServer.Active;
+end;
+
+end.
diff --git a/Demos/UniDAC Basic/Server.WebModule.dfm b/Demos/UniDAC Basic/Server.WebModule.dfm
new file mode 100644
index 00000000..cfa79a10
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.WebModule.dfm
@@ -0,0 +1,12 @@
+object ServerWebModule: TServerWebModule
+ OldCreateOrder = False
+ Actions = <
+ item
+ Default = True
+ Name = 'DefaultHandler'
+ PathInfo = '/'
+ OnAction = ServerWebModuleDefaultHandlerAction
+ end>
+ Height = 230
+ Width = 415
+end
diff --git a/Demos/UniDAC Basic/Server.WebModule.pas b/Demos/UniDAC Basic/Server.WebModule.pas
new file mode 100644
index 00000000..2ad473c8
--- /dev/null
+++ b/Demos/UniDAC Basic/Server.WebModule.pas
@@ -0,0 +1,57 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit Server.WebModule;
+
+{$I MARS.inc}
+
+interface
+
+uses System.SysUtils, System.Classes, Web.HTTPApp;
+
+type
+ TServerWebModule = class(TWebModule)
+ procedure ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ WebModuleClass: TComponentClass = TServerWebModule;
+
+implementation
+
+{%CLASSGROUP 'System.Classes.TPersistent'}
+
+{$R *.dfm}
+
+uses
+ MARS.http.Server.Indy
+, Server.Ignition;
+
+procedure TServerWebModule.ServerWebModuleDefaultHandlerAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ inherited;
+
+ if not TServerEngine.Default.HandleRequest(TMARSWebRequest.Create(Request), TMARSWebResponse.Create(Response)) then
+ begin
+ Response.ContentType := 'application/json';
+ Response.Content :=
+ '{"success": false, "details": '
+ + '{'
+ + '"error": "Request not found",'
+ + '"pathinfo": "' + Request.PathInfo + '"'
+ + '}'
+ + '}';
+ end
+ else
+ Handled := True;
+end;
+
+end.
diff --git a/Demos/UniDAC Basic/ServerConst.pas b/Demos/UniDAC Basic/ServerConst.pas
new file mode 100644
index 00000000..2ddaea07
--- /dev/null
+++ b/Demos/UniDAC Basic/ServerConst.pas
@@ -0,0 +1,42 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit ServerConst;
+
+interface
+
+resourcestring
+ sPortInUse = '- Error: Port %s already in use';
+ sPortSet = '- Port set to %s';
+ sServerRunning = '- The Server is already running';
+ sStartingServer = '- Starting HTTP Server on port %d';
+ sStoppingServer = '- Stopping Server';
+ sServerStopped = '- Server Stopped';
+ sServerNotRunning = '- The Server is not running';
+ sInvalidCommand = '- Error: Invalid Command';
+ sIndyVersion = '- Indy Version: ';
+ sActive = '- Active: ';
+ sPort = '- Port: ';
+ sSessionID = '- Session ID CookieName: ';
+ sCommands = 'Enter a Command: ' + slineBreak +
+ ' - "start" to start the server'+ slineBreak +
+ ' - "stop" to stop the server'+ slineBreak +
+ ' - "set port" to change the default port'+ slineBreak +
+ ' - "status" for Server status'+ slineBreak +
+ ' - "help" to show commands'+ slineBreak +
+ ' - "exit" to close the application';
+
+const
+ cArrow = '->';
+ cCommandStart = 'start';
+ cCommandStop = 'stop';
+ cCommandStatus = 'status';
+ cCommandHelp = 'help';
+ cCommandSetPort = 'set port';
+ cCommandExit = 'exit';
+
+implementation
+
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicClient.dpr b/Demos/UniDAC Basic/UniDACBasicClient.dpr
new file mode 100644
index 00000000..ec85dd83
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicClient.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
program UniDACBasicClient;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ FMXClient.Forms.Main in 'FMXClient.Forms.Main.pas' {MainForm},
+ FMXClient.DataModules.Main in 'FMXClient.DataModules.Main.pas' {MainDataModule: TDataModule};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainDataModule, MainDataModule);
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicClient.dproj b/Demos/UniDAC Basic/UniDACBasicClient.dproj
new file mode 100644
index 00000000..bf43c19d
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicClient.dproj
@@ -0,0 +1,1259 @@
+
+
+ {B6B860BA-E3A5-48E9-8EC6-7FE516AE7FC4}
+ UniDACBasicClient.dpr
+ True
+ Debug
+ 1169
+ Application
+ FMX
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ UniDACBasicClient
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ true
+ Base
+ true
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ UniDACBasicServer_Icon.ico
+
+
+ $(BDS)\bin\default_app.manifest
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ UniDACBasicServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+ TDataModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicClient.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ False
+ True
+ False
+ True
+ False
+ False
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ libUniDACBasicClient.so
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ splash_image.png
+ true
+
+
+
+
+ true
+
+
+
+
+ classes.dex
+ true
+
+
+
+
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ libUniDACBasicClient.so
+ true
+
+
+
+
+ ic_launcher.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ libUniDACBasicClient.so
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicProjectGroup.groupproj b/Demos/UniDAC Basic/UniDACBasicProjectGroup.groupproj
new file mode 100644
index 00000000..743e65bd
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicProjectGroup.groupproj
@@ -0,0 +1,120 @@
+
+
+ {6E23DEFF-F737-42C3-B8AD-2549B8F67C93}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dpr b/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dpr
new file mode 100644
index 00000000..55815590
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dpr
@@ -0,0 +1,54 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+library UniDACBasicServerApacheModule;
+
+uses
+ {$IFDEF MSWINDOWS}
+ Winapi.ActiveX, System.Win.ComObj,
+ {$ENDIF }
+ Web.WebBroker,
+ Web.ApacheApp,
+ Web.HTTPD24Impl,
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+// httpd.conf entries:
+//
+(*
+ LoadModule marstemplate_module modules/mod_marstemplate.dll
+
+
+ SetHandler mod_marstemplate-handler
+
+*)
+//
+// These entries assume that the output directory for this project is the apache/modules directory.
+//
+// httpd.conf entries should be different if the project is changed in these ways:
+// 1. The TApacheModuleData variable name is changed.
+// 2. The project is renamed.
+// 3. The output directory is not the apache/modules directory.
+// 4. The dynamic library extension depends on a platform. Use .dll on Windows and .so on Linux.
+//
+
+// Declare exported variable so that Apache can access this module.
+var
+ GModuleData: TApacheModuleData;
+exports
+ GModuleData name 'marstemplate_module';
+
+begin
+{$IFDEF MSWINDOWS}
+ CoInitFlags := COINIT_MULTITHREADED;
+{$ENDIF}
+ Web.ApacheApp.InitApplication(@GModuleData);
+ Application.Initialize;
+ Application.WebModuleClass := WebModuleClass;
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dproj b/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dproj
new file mode 100644
index 00000000..4489e7c8
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerApacheModule.dproj
@@ -0,0 +1,856 @@
+
+
+ {0D982E91-6C92-4321-9078-458448B01536}
+ 18.7
+ None
+ UniDACBasicServerApacheModule.dpr
+ True
+ Release
+ Win32
+ 129
+ Library
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ .\lib\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ true
+ RESTComponents;emsclientfiredac;DataSnapFireDAC;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ UniDACBasicServerApacheModule
+
+
+ DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;dbexpress;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)
+ true
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ false
+ true
+ 1033
+ (None)
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+ dfm
+ TWebModule
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Library
+
+
+
+ UniDACBasicServerApacheModule.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ UniDACBasicServerApacheModule.dll
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ libUniDACBasicServerApacheModule.so
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ False
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerApplication.dpr b/Demos/UniDAC Basic/UniDACBasicServerApplication.dpr
new file mode 100644
index 00000000..07a8089c
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerApplication.dpr
@@ -0,0 +1,23 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
program UniDACBasicServerApplication;
+
+uses
+ Forms,
+ Server.Forms.Main in 'Server.Forms.Main.pas' {MainForm},
+ Server.Resources in 'Server.Resources.pas',
+ Server.Ignition in 'Server.Ignition.pas';
+
+{$R *.res}
+
+begin
+ ReportMemoryLeaksOnShutdown := True;
+
+ Application.Initialize;
+ Application.MainFormOnTaskbar := True;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerApplication.dproj b/Demos/UniDAC Basic/UniDACBasicServerApplication.dproj
new file mode 100644
index 00000000..40028b56
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerApplication.dproj
@@ -0,0 +1,190 @@
+
+
+ {0A5E1DDC-90B4-4B41-A7DC-2B0FC45D4349}
+ UniDACBasicServerApplication.dpr
+ True
+ Debug
+ 3
+ Application
+ VCL
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ UniDACBasicServerApplication
+ Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ UniDACBasicServer_Icon.ico
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ UniDACBasicServer_Icon.ico
+ PerMonitor
+
+
+ true
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicServerApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ True
+ True
+
+
+ 12
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dpr b/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dpr
new file mode 100644
index 00000000..882167f5
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dpr
@@ -0,0 +1,201 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program UniDACBasicServerConsoleApplication;
+{$APPTYPE CONSOLE}
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ System.SysUtils,
+ System.Types,
+// IPPeerServer, IPPeerAPI,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ Web.WebReq,
+ Web.WebBroker,
+{$else}
+ SysUtils, StrUtils,
+ Types,
+ IdHTTPWebBrokerBridge,
+ IdSchedulerOfThreadPool,
+ WebReq,
+ WebBroker,
+{$endif}
+ IdContext,
+ ServerConst in 'ServerConst.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule},
+ Server.Ignition in 'Server.Ignition.pas';
+
+{$R *.res}
+
+type
+ TDummyIndyServer = class
+ public
+ procedure ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean); virtual;
+ end;
+
+
+procedure StartServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if not (AServer.Active) then
+ begin
+ AServer.DefaultPort := TServerEngine.Default.Port;
+ Writeln(Format(sStartingServer, [AServer.DefaultPort]));
+ AServer.Active := True;
+ end
+ else
+ Writeln(sServerRunning);
+ Write(cArrow);
+end;
+
+procedure StopServer(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ if AServer.Active then
+ begin
+ Writeln(sStoppingServer);
+ AServer.Active := False;
+ Writeln(sServerStopped);
+ end
+ else
+ Writeln(sServerNotRunning);
+ Write(cArrow);
+end;
+
+procedure SetPort(const AServer: TIdHTTPWebBrokerBridge; const APort: string);
+var
+ LPort: Integer;
+ LWasActive: Boolean;
+begin
+ LPort := StrToIntDef(APort, -1);
+ if LPort = -1 then
+ begin
+ Writeln('Port should be an integer number. Try again.');
+ Exit;
+ end;
+
+ LWasActive := AServer.Active;
+ if LWasActive then
+ StopServer(AServer);
+ TServerEngine.Default.Port := LPort;
+ if LWasActive then
+ StartServer(AServer);
+ Writeln(Format(sPortSet, [IntToStr(TServerEngine.Default.Port)]));
+ Write(cArrow);
+end;
+
+procedure WriteCommands;
+begin
+ Writeln(sCommands);
+ Write(cArrow);
+end;
+
+procedure WriteStatus(const AServer: TIdHTTPWebBrokerBridge);
+begin
+ Writeln(sIndyVersion + AServer.SessionList.Version);
+ Writeln(sActive + BoolToStr(AServer.Active, True));
+ Writeln(sPort + IntToStr(TServerEngine.Default.Port));
+ Write(cArrow);
+end;
+
+procedure SetupThreadScheduler(const AServer: TIdHTTPWebBrokerBridge);
+var
+ LScheduler: TIdSchedulerOfThreadPool;
+begin
+ LScheduler := TIdSchedulerOfThreadPool.Create(AServer);
+ try
+ LScheduler.PoolSize := TServerEngine.Default.ThreadPoolSize;
+ AServer.Scheduler := LScheduler;
+ AServer.MaxConnections := LScheduler.PoolSize;
+ except
+ AServer.Scheduler.DisposeOf;
+ AServer.Scheduler := nil;
+ raise;
+ end;
+end;
+
+procedure RunServer();
+var
+ LServer: TIdHTTPWebBrokerBridge;
+ LDummyIndy: TDummyIndyServer;
+ LResponse: string;
+begin
+ WriteCommands;
+ LDummyIndy := TDummyIndyServer.Create;
+ try
+ LServer := TIdHTTPWebBrokerBridge.Create(nil);
+ try
+ LServer.DefaultPort := TServerEngine.Default.Port;
+ LServer.OnParseAuthentication := LDummyIndy.ParseAuthenticationHandler;
+ {$IFNDEF LINUX}
+ SetupThreadScheduler(LServer);
+ {$ENDIF}
+
+ while True do
+ begin
+ Readln(LResponse);
+ LResponse := LowerCase(LResponse);
+ if sametext(LResponse, cCommandStart) then
+ StartServer(LServer)
+ else if sametext(LResponse, cCommandStatus) then
+ WriteStatus(LServer)
+ else if sametext(LResponse, cCommandStop) then
+ StopServer(LServer)
+ {$ifdef DelphiXE3_UP}
+ else if LResponse.StartsWith(cCommandSetPort, True) then
+ SetPort(LServer, LResponse.Split([' '])[2])
+ {$else}
+ else if AnsiStartsText(cCommandSetPort, LResponse) then
+ SetPort(LServer, Copy(LResponse, Length(cCommandSetPort)+1, MAXINT))
+ {$endif}
+
+ else if sametext(LResponse, cCommandHelp) then
+ WriteCommands
+ else if sametext(LResponse, cCommandExit) then
+ if LServer.Active then
+ begin
+ StopServer(LServer);
+ break
+ end
+ else
+ break
+ else
+ begin
+ Writeln(sInvalidCommand);
+ Write(cArrow);
+ end;
+ end;
+ finally
+ LServer.Free;
+ end;
+ finally
+ LDummyIndy.Free;
+ end;
+end;
+
+{ TDummyIndyServer }
+
+procedure TDummyIndyServer.ParseAuthenticationHandler(AContext: TIdContext;
+ const AAuthType, AAuthData: String; var VUsername, VPassword: String;
+ var VHandled: Boolean);
+begin
+ // Allow JWT Bearer authentication's scheme
+ if SameText(AAuthType, 'Bearer') then
+ VHandled := True;
+end;
+
+begin
+ try
+ if WebRequestHandler <> nil then
+ WebRequestHandler.WebModuleClass := WebModuleClass;
+ RunServer();
+ except
+ on E: Exception do
+ Writeln(E.ClassName, ': ', E.Message);
+ end
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dproj b/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dproj
new file mode 100644
index 00000000..375ad036
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerConsoleApplication.dproj
@@ -0,0 +1,1049 @@
+
+
+ {8EEC8DF2-3740-468A-937A-60168245FB71}
+ UniDACBasicServerConsoleApplication.dpr
+ True
+ Release
+ 4229
+ Console
+ None
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ UniDACBasicServerConsoleApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ ./bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+ UniDACBasicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ UniDACBasicServer_Icon.ico
+ (None)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ UniDACBasicServerConsoleApplication_Icon.ico
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ UniDACBasicServer_Icon.ico
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ UniDACBasicServer_Icon.ico
+
+
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ UniDACBasicServer_Icon.ico
+
+
+
+ MainSource
+
+
+
+
+ TWebModule
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicServerConsoleApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ False
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ UniDACBasicServerConsoleApplication
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerDaemon.dpr b/Demos/UniDAC Basic/UniDACBasicServerDaemon.dpr
new file mode 100644
index 00000000..0b5ff770
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerDaemon.dpr
@@ -0,0 +1,21 @@
+program UniDACBasicServerDaemon;
+
+{$APPTYPE CONSOLE}
+
+{$R *.res}
+
+uses
+ Classes,
+ SysUtils,
+ {$IFDEF LINUX}
+ MARS.Linux.Daemon in '..\..\Source\MARS.Linux.Daemon.pas',
+ {$ENDIF}
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+begin
+ {$IFDEF LINUX}
+ TMARSDaemon.Current.Name := 'UniDACBasicServerDaemon';
+ TMARSDaemon.Current.Start;
+ {$ENDIF}
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerDaemon.dproj b/Demos/UniDAC Basic/UniDACBasicServerDaemon.dproj
new file mode 100644
index 00000000..ed89f818
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerDaemon.dproj
@@ -0,0 +1,1008 @@
+
+
+ {9D225C2C-24C2-48B4-8ABE-52C04AF576AE}
+ 18.7
+ None
+ UniDACBasicServerDaemon.dpr
+ True
+ Debug
+ Linux64
+ 128
+ Console
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ .\lib\$(Platform)\$(Config)
+ .\bin
+ false
+ false
+ false
+ false
+ false
+ RESTComponents;emsclientfiredac;DataSnapFireDAC;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage)
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ UniDACBasicServerDaemon
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DBXSqliteDriver;DBXInterBaseDriver;tethering;bindcompfmx;FmxTeeUI;fmx;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;ibmonitor;FMXTee;DbxCommonDriver;ibxpress;xmlrtl;DataSnapNativeClient;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage)
+
+
+ DataSnapServerMidas;FireDACADSDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;inetdb;emsedge;dbexpress;IndyCore;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;bindengine;FireDACOracleDriver;FireDACMySQLDriver;FireDACCommonODBC;DataSnapClient;IndySystem;FireDACDb2Driver;FireDACInfxDriver;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;rtl;DbxClientDriver;CustomIPTransport;bindcomp;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;dbrtl;FireDACMongoDBDriver;IndyProtocols;$(DCC_UsePackage)
+ /usr/bin/xterm -e "%debuggee%"
+ UniDACBasicServer_Icon.ico
+ (None)
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ true
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts
+ Debug
+ true
+ Base
+ true
+ DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage);$(DCC_UsePackage)
+ true
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;RadiantShapesFmx_Design;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;fmxdae;RadiantShapesFmx;vclib;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;MARS.Utils;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;emshosting;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage)
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ /usr/bin/xterm -e "%debuggee%"
+
+
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Application
+
+
+
+ UniDACBasicServerDaemon.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ UniDACBasicServerDaemon
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ False
+ False
+ False
+ True
+ False
+ False
+ False
+ False
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.deployproj b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.deployproj
new file mode 100644
index 00000000..25ae74ba
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.deployproj
@@ -0,0 +1,132 @@
+
+
+
+ 12
+
+
+
+
+
+ iPhone5
+
+
+
+
+
+
+ UniDACBasicServerFMXApplication\
+ UniDACBasicServerFMXApplication.exe
+ ProjectOutput
+ 0
+
+
+ True
+ True
+
+
+
+
+ UniDACBasicServerFMXApplication.app\Assets\
+ Logo44x44.png
+ UWP_DelphiLogo44
+ 0
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\MacOS\
+ libcgunwind.1.0.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\MacOS\
+ UniDACBasicServerFMXApplication.rsm
+ DebugSymbols
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\..\
+ UniDACBasicServerFMXApplication.entitlements
+ ProjectOSXEntitlements
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\Resources\
+ UniDACBasicServerFMXApplication.icns
+ ProjectOSXResource
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\
+ Info.plist
+ ProjectOSXInfoPList
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\MacOS\
+ libcgsqlite3.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Assets\
+ Logo150x150.png
+ UWP_DelphiLogo150
+ 0
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\Contents\MacOS\
+ UniDACBasicServerFMXApplication
+ ProjectOutput
+ 1
+
+
+ True
+ True
+
+
+
+
+
+ UniDACBasicServerFMXApplication.app\
+ libPCRE.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+ UniDACBasicServerFMXApplication.app\
+ libcgunwind.1.0.dylib
+ DependencyModule
+ 1
+
+
+ True
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dpr b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dpr
new file mode 100644
index 00000000..ad31a42c
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dpr
@@ -0,0 +1,21 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program UniDACBasicServerFMXApplication;
+
+uses
+ System.StartUpCopy,
+ FMX.Forms,
+ Server.FMX.Forms.Main in 'Server.FMX.Forms.Main.pas' {MainForm},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas';
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TMainForm, MainForm);
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dproj b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dproj
new file mode 100644
index 00000000..b050412b
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerFMXApplication.dproj
@@ -0,0 +1,1212 @@
+
+
+ {2DC28130-9EB1-48C8-9CA6-0F3CFD5D8E1D}
+ UniDACBasicServerFMXApplication.dpr
+ True
+ Release
+ 5269
+ Application
+ FMX
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ UniDACBasicServerFMXApplication
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ $(BDS)\bin\delphi_PROJECTICON.ico
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png
+ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png
+ $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar
+ 1
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png
+ $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ Debug
+ $(MSBuildProjectName)
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera
+ iPhoneAndiPad
+ true
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png
+ $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png
+ $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png
+
+
+ /usr/bin/xterm -e "%debuggee%"
+ (None)
+ UniDACBasicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+ UniDACBasicServer_Icon.ico
+
+
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+ Debug
+ true
+ true
+ Base
+ true
+ /usr/X11/bin/xterm -e "%debuggee%"
+ (None)
+ UniDACBasicServer_Icon.ico
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServerFMXApplication_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ Debug
+
+
+ true
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+
+
+ true
+ Cfg_1
+ true
+ true
+ CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSContactsUsageDescription=The reason for accessing the contacts;CFBundleShortVersionString=1.0.0;NSLocationUsageDescription=The reason for accessing the location information of the user
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ UniDACBasicServer_Icon.ico
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ true
+
+
+ Debug
+
+
+ true
+
+
+ $(BDS)\bin\delphi_PROJECTICNS.icns
+ true
+
+
+ true
+ true
+ Cfg_2
+ true
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ UniDACBasicServer_Icon.ico
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicServerFMXApplication.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ True
+ False
+ True
+ False
+ True
+ True
+ True
+ True
+ False
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ UniDACBasicServerFMXApplication.exe
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerISAPI.dpr b/Demos/UniDAC Basic/UniDACBasicServerISAPI.dpr
new file mode 100644
index 00000000..8a8120dd
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerISAPI.dpr
@@ -0,0 +1,30 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+library UniDACBasicServerISAPI;
+
+uses
+ Winapi.ActiveX,
+ System.Win.ComObj,
+ Web.WebBroker,
+ Web.Win.ISAPIApp,
+ Web.Win.ISAPIThreadPool,
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+{$R *.res}
+
+exports
+ GetExtensionVersion,
+ HttpExtensionProc,
+ TerminateExtension;
+
+begin
+ CoInitFlags := COINIT_MULTITHREADED;
+ Application.Initialize;
+ Application.WebModuleClass := WebModuleClass;
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerISAPI.dproj b/Demos/UniDAC Basic/UniDACBasicServerISAPI.dproj
new file mode 100644
index 00000000..8fd198bc
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerISAPI.dproj
@@ -0,0 +1,152 @@
+
+
+ {9715EDC7-B308-42F7-B5EF-14BB4698B974}
+ UniDACBasicServerISAPI.dpr
+ True
+ Release
+ 1
+ Library
+ None
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ true
+ UniDACBasicServerISAPI
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ .\bin
+ .\lib\$(Platform)\$(Config)
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ (None)
+
+
+ UniDACBasicServerISAPI_Icon.ico
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ (None)
+
+
+
+ MainSource
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicServerISAPI.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ True
+ False
+
+
+ 12
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServerService.dpr b/Demos/UniDAC Basic/UniDACBasicServerService.dpr
new file mode 100644
index 00000000..456a4e02
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerService.dpr
@@ -0,0 +1,43 @@
+(*
+ Copyright 2016, MARS-Curiosity - REST Library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+program UniDACBasicServerService;
+
+{$I MARS.inc}
+
+uses
+{$ifdef DelphiXE3_UP}
+ Vcl.SvcMgr,
+{$else}
+ SvcMgr,
+{$endif}
+
+ Server.Service in 'Server.Service.pas' {ServerService: TService},
+ Server.Ignition in 'Server.Ignition.pas',
+ Server.Resources in 'Server.Resources.pas',
+ Server.WebModule in 'Server.WebModule.pas' {ServerWebModule: TWebModule};
+
+{$R *.RES}
+
+begin
+ // Windows 2003 Server requires StartServiceCtrlDispatcher to be
+ // called before CoRegisterClassObject, which can be called indirectly
+ // by Application.Initialize. TServiceApplication.DelayInitialize allows
+ // Application.Initialize to be called from TService.Main (after
+ // StartServiceCtrlDispatcher has been called).
+ //
+ // Delayed initialization of the Application object may affect
+ // events which then occur prior to initialization, such as
+ // TService.OnCreate. It is only recommended if the ServiceApplication
+ // registers a class object with OLE and is intended for use with
+ // Windows 2003 Server.
+ //
+ // Application.DelayInitialize := True;
+ //
+ if not Application.DelayInitialize or Application.Installing then
+ Application.Initialize;
+ Application.CreateForm(TServerService, ServerService);
+ Application.Run;
+end.
diff --git a/Demos/UniDAC Basic/UniDACBasicServerService.dproj b/Demos/UniDAC Basic/UniDACBasicServerService.dproj
new file mode 100644
index 00000000..9b969521
--- /dev/null
+++ b/Demos/UniDAC Basic/UniDACBasicServerService.dproj
@@ -0,0 +1,1006 @@
+
+
+ {FEF5DF94-50B0-46F7-9F4B-6C355F140A2F}
+ UniDACBasicServerService.dpr
+ True
+ Release
+ 3
+ Application
+ None
+ 18.7
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ UniDACBasicServerService
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;Vcl;Winapi;$(DCC_Namespace)
+ .\lib\$(Platform)\$(Config)
+ .\bin
+
+
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServer_Icon.ico
+ true
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ $(BDS)\bin\default_app.manifest
+ UniDACBasicServer_Icon.ico
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+ true
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ MARS.ico
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png
+ $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png
+ PerMonitor
+
+
+
+ MainSource
+
+
+
+ TService
+
+
+
+
+
+ TWebModule
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+
+
+
+
+ UniDACBasicServerService.dpr
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ True
+ True
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ Assets\
+ Logo150x150.png
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ Assets\
+ Logo44x44.png
+ true
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ Contents\MacOS
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ Contents\MacOS
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ Contents\Resources\StartUp\
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+ ..\
+ 1
+
+
+ ..\
+ 1
+
+
+
+
+ Contents
+ 1
+
+
+ Contents
+ 1
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ Contents\MacOS
+ 1
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Demos/UniDAC Basic/UniDACBasicServer_Icon.ico b/Demos/UniDAC Basic/UniDACBasicServer_Icon.ico
new file mode 100644
index 00000000..0067d86b
Binary files /dev/null and b/Demos/UniDAC Basic/UniDACBasicServer_Icon.ico differ
diff --git a/Demos/UniDAC Basic/bin/MyDatabase.db b/Demos/UniDAC Basic/bin/MyDatabase.db
new file mode 100644
index 00000000..76795749
Binary files /dev/null and b/Demos/UniDAC Basic/bin/MyDatabase.db differ
diff --git a/Demos/UniDAC Basic/bin/UniDACBasicServerApplication.ini b/Demos/UniDAC Basic/bin/UniDACBasicServerApplication.ini
new file mode 100644
index 00000000..54d1e739
--- /dev/null
+++ b/Demos/UniDAC Basic/bin/UniDACBasicServerApplication.ini
@@ -0,0 +1,26 @@
+[DefaultEngine]
+ThreadPoolSize=100
+
+;UniDAC.MAIN_DB.ConnectString=Provider Name=InterBase;Data Source=localhost;Database=employee;User ID=SYSDBA;Password=masterkey
+
+FireDAC.MAIN_DB.DriverID=FB
+FireDAC.MAIN_DB.Database=employee
+FireDAC.MAIN_DB.User_Name=SYSDBA
+FireDAC.MAIN_DB.Password=masterkey
+FireDAC.MAIN_DB.Protocol=TCPIP
+FireDAC.MAIN_DB.Server=localhost
+FireDAC.MAIN_DB.Pooled=True
+FireDAC.MAIN_DB.POOL_MaximumItems=100
+
+UniDAC.MAIN_DB.Provider Name=InterBase
+UniDAC.MAIN_DB.Data Source=localhost
+UniDAC.MAIN_DB.Database=employee
+UniDAC.MAIN_DB.User ID=SYSDBA
+UniDAC.MAIN_DB.Password=masterkey
+UniDAC.MAIN_DB.Login Prompt=False
+UniDAC.MAIN_DB.Pooling=True
+
+UniDAC.MY_SQLITE.Provider Name=SQLite
+UniDAC.MY_SQLITE.Database=C:\Sviluppo\Librerie\MARS\Demos\UniDAC Basic\bin\MyDatabase.db
+UniDAC.MY_SQLITE.Login Prompt=False
+UniDAC.MY_SQLITE.Pooling=False
diff --git a/Packages/103Rio/MARS.Core.dpk b/Packages/103Rio/MARS.Core.dpk
index a2bcb294..27e0fd5a 100644
--- a/Packages/103Rio/MARS.Core.dpk
+++ b/Packages/103Rio/MARS.Core.dpk
@@ -9,21 +9,21 @@ package MARS.Core;
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
-{$LOCALSYMBOLS OFF}
+{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
-{$OPTIMIZATION ON}
+{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
-{$REFERENCEINFO OFF}
+{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
-{$STACKFRAMES OFF}
+{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
-{$DEFINE RELEASE}
+{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'MARS-Curiosity Core'}
{$LIBSUFFIX '260'}
@@ -65,3 +65,4 @@ end.
+
diff --git a/Packages/103Rio/MARS.Core.dproj b/Packages/103Rio/MARS.Core.dproj
index c07495ad..0d27b5ed 100644
--- a/Packages/103Rio/MARS.Core.dproj
+++ b/Packages/103Rio/MARS.Core.dproj
@@ -1,195 +1,198 @@
-
-
- {8C6A1564-94E6-420D-BDE4-54A4CD3BD125}
- MARS.Core.dpk
- True
- Release
- 131
- Package
- None
- 18.5
- Win32
-
-
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- false
- false
- false
- false
- false
- 00400000
- true
- true
- MARS_Core
- MARS-Curiosity Core
- 260
- true
- true
- 1040
- CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
- System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
- ..\..\Source;$(DCC_UnitSearchPath)
- ..\..\Lib260\$(Platform)\$(Config)
-
-
- package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
- Debug
- android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
-
-
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- Debug
- true
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
- 1033
-
-
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug
- true
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
- 1033
-
-
- RELEASE;$(DCC_Define)
- 0
- false
- 0
-
-
- true
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
-
-
- DEBUG;$(DCC_Define)
- false
- true
-
-
- Debug
-
-
- true
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
-
-
-
- MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cfg_2
- Base
-
-
- Base
-
-
- Cfg_1
- Base
-
-
-
- Delphi.Personality.12
- Package
-
-
-
- MARS.Core.dpk
-
-
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
-
-
-
- False
- False
- False
- False
- True
- False
- True
- True
-
-
- 12
-
-
-
-
+
+
+ {8C6A1564-94E6-420D-BDE4-54A4CD3BD125}
+ MARS.Core.dpk
+ True
+ Release
+ 131
+ Package
+ None
+ 18.8
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ true
+ true
+ MARS_Core
+ MARS-Curiosity Core
+ 260
+ true
+ true
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ ..\..\Source;$(DCC_UnitSearchPath)
+ ..\..\Lib260\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.Core.dpk
+
+
+ DBExpress Enterprise Data Explorer Integration
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ CodeSite Express 5.3.3
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ False
+ True
+ True
+
+
+ 12
+
+
+
+
diff --git a/Packages/103Rio/MARS.Core.res b/Packages/103Rio/MARS.Core.res
index 8d2bc484..3e070e28 100644
Binary files a/Packages/103Rio/MARS.Core.res and b/Packages/103Rio/MARS.Core.res differ
diff --git a/Packages/103Rio/MARS.DCS.dpk b/Packages/103Rio/MARS.DCS.dpk
new file mode 100644
index 00000000..f0c7eac1
--- /dev/null
+++ b/Packages/103Rio/MARS.DCS.dpk
@@ -0,0 +1,57 @@
+package MARS.DCS;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library - DelphiCrossSocket support'}
+{$LIBSUFFIX '260'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ MARS.Utils,
+ MARS.Core;
+
+contains
+ MARS.http.Server.DCS in '..\..\Source\MARS.http.Server.DCS.pas',
+ Net.CrossHttpMiddleware in '..\..\ThirdParty\DCS\Net\Net.CrossHttpMiddleware.pas',
+ Net.CrossHttpParams in '..\..\ThirdParty\DCS\Net\Net.CrossHttpParams.pas',
+ Net.CrossHttpRouter in '..\..\ThirdParty\DCS\Net\Net.CrossHttpRouter.pas',
+ Net.CrossHttpServer in '..\..\ThirdParty\DCS\Net\Net.CrossHttpServer.pas',
+ Net.CrossHttpUtils in '..\..\ThirdParty\DCS\Net\Net.CrossHttpUtils.pas',
+ Net.CrossServer in '..\..\ThirdParty\DCS\Net\Net.CrossServer.pas',
+ Net.CrossSocket.Iocp in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.Iocp.pas',
+ Net.CrossSocket in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.pas',
+ Net.SocketAPI in '..\..\ThirdParty\DCS\Net\Net.SocketAPI.pas',
+ Net.Winsock2 in '..\..\ThirdParty\DCS\Net\Net.Winsock2.pas',
+ Net.Wship6 in '..\..\ThirdParty\DCS\Net\Net.Wship6.pas',
+ Net.CrossSocket.Base in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.Base.pas',
+ Utils.DateTime in '..\..\ThirdParty\DCS\Utils\Utils.DateTime.pas',
+ Utils.Logger in '..\..\ThirdParty\DCS\Utils\Utils.Logger.pas',
+ Utils.RegEx in '..\..\ThirdParty\DCS\Utils\Utils.RegEx.pas',
+ Utils.Utils in '..\..\ThirdParty\DCS\Utils\Utils.Utils.pas';
+
+end.
diff --git a/Packages/103Rio/MARS.DCS.dproj b/Packages/103Rio/MARS.DCS.dproj
new file mode 100644
index 00000000..0531394e
--- /dev/null
+++ b/Packages/103Rio/MARS.DCS.dproj
@@ -0,0 +1,1068 @@
+
+
+ {02BBCED0-86EE-4FB8-A124-5BD6E5477506}
+ MARS.DCS.dpk
+ 18.8
+ None
+ True
+ Release
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ ..\..\Lib260\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ true
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ All
+ MARS_DCS
+ true
+ true
+ 1040
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ MARS-Curiosity REST Library - DelphiCrossSocket support
+ 260
+ ..\..\Source;$(DCC_UnitSearchPath)
+
+
+ None
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ None
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ None
+
+
+ None
+
+
+ None
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ 1033
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ 1033
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ false
+ true
+ 1033
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.DCS.dpk
+
+
+ DBExpress Enterprise Data Explorer Integration
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+ CodeSite Express 5.3.3
+
+
+
+
+
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/103Rio/MARS.DCS.res b/Packages/103Rio/MARS.DCS.res
new file mode 100644
index 00000000..6dbcdc6a
Binary files /dev/null and b/Packages/103Rio/MARS.DCS.res differ
diff --git a/Packages/103Rio/MARS.DelphiRazor.dpk b/Packages/103Rio/MARS.DelphiRazor.dpk
index 58085036..19c36215 100644
--- a/Packages/103Rio/MARS.DelphiRazor.dpk
+++ b/Packages/103Rio/MARS.DelphiRazor.dpk
@@ -26,7 +26,7 @@ package MARS.DelphiRazor;
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'MARS-Curiosity Core'}
-{$LIBSUFFIX '250'}
+{$LIBSUFFIX '260'}
{$RUNONLY}
{$IMPLICITBUILD OFF}
diff --git a/Packages/103Rio/MARS.DelphiRazor.dproj b/Packages/103Rio/MARS.DelphiRazor.dproj
index d8e4b85f..15fb892c 100644
--- a/Packages/103Rio/MARS.DelphiRazor.dproj
+++ b/Packages/103Rio/MARS.DelphiRazor.dproj
@@ -58,7 +58,7 @@
true
..\..\Source;$(DCC_UnitSearchPath)
true
- 250
+ 260
MARS-Curiosity REST Library
CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
1040
@@ -168,7 +168,7 @@
true
-
+
MARS_DelphiRazor.bpl
true
diff --git a/Packages/103Rio/MARS.FireDAC.dpk b/Packages/103Rio/MARS.FireDAC.dpk
index 1b1dc2d6..b86f459f 100644
--- a/Packages/103Rio/MARS.FireDAC.dpk
+++ b/Packages/103Rio/MARS.FireDAC.dpk
@@ -9,23 +9,23 @@ package MARS.FireDAC;
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
-{$LOCALSYMBOLS OFF}
+{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
-{$OPTIMIZATION ON}
+{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
-{$REFERENCEINFO OFF}
+{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
-{$STACKFRAMES OFF}
+{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
-{$DEFINE RELEASE}
+{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
-{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$DESCRIPTION 'MARS-Curiosity FireDAC'}
{$LIBSUFFIX '260'}
{$RUNONLY}
{$IMPLICITBUILD OFF}
diff --git a/Packages/103Rio/MARS.FireDAC.dproj b/Packages/103Rio/MARS.FireDAC.dproj
index f7063962..ce2bee02 100644
--- a/Packages/103Rio/MARS.FireDAC.dproj
+++ b/Packages/103Rio/MARS.FireDAC.dproj
@@ -2,7 +2,7 @@
{D44362A0-1BCF-45FD-80B4-281FB36C0E08}
MARS.FireDAC.dpk
- 18.5
+ 18.8
None
True
Release
@@ -34,12 +34,6 @@
Base
true
-
- true
- Cfg_2
- true
- true
-
true
true
@@ -88,11 +82,6 @@
0
0
-
- true
- 1033
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
-
MainSource
@@ -140,10 +129,8 @@
MARS.FireDAC.dpk
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
@@ -152,6 +139,12 @@
true
+
+
+ bplMARS_FireDAC.so
+ true
+
+
true
@@ -177,18 +170,12 @@
true
-
+
MARS_FireDAC.bpl
true
-
-
- bplMARS_FireDAC.so
- true
-
-
1
@@ -202,12 +189,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -220,12 +215,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -233,84 +242,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -380,6 +521,9 @@
0
+
+ 0
+
0
@@ -410,6 +554,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -421,6 +576,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -432,6 +620,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -443,6 +686,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -476,10 +829,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -523,6 +901,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -545,6 +927,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -582,6 +970,7 @@
+
True
diff --git a/Packages/103Rio/MARS.FireDAC.res b/Packages/103Rio/MARS.FireDAC.res
index 83681a4b..527eb12d 100644
Binary files a/Packages/103Rio/MARS.FireDAC.res and b/Packages/103Rio/MARS.FireDAC.res differ
diff --git a/Packages/103Rio/MARS.JOSE.dpk b/Packages/103Rio/MARS.JOSE.dpk
index 84cf46b4..8cbee885 100644
--- a/Packages/103Rio/MARS.JOSE.dpk
+++ b/Packages/103Rio/MARS.JOSE.dpk
@@ -39,20 +39,30 @@ requires
MARS.Core;
contains
+ MARS.JOSEJWT.Token in '..\..\Source\MARS.JOSEJWT.Token.pas',
+ MARS.JOSEJWT.Token.InjectionService in '..\..\Source\MARS.JOSEJWT.Token.InjectionService.pas',
+ JOSE.Builder in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Builder.pas',
+ JOSE.Consumer in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Consumer.pas',
+ JOSE.Consumer.Validators in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Consumer.Validators.pas',
+ JOSE.Context in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Context.pas',
JOSE.Core.Base in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Base.pas',
JOSE.Core.Builder in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Builder.pas',
+ JOSE.Core.JWA.Compression in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Compression.pas',
+ JOSE.Core.JWA.Encryption in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Encryption.pas',
+ JOSE.Core.JWA.Factory in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Factory.pas',
JOSE.Core.JWA in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.pas',
+ JOSE.Core.JWA.Signing in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Signing.pas',
JOSE.Core.JWE in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWE.pas',
JOSE.Core.JWK in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWK.pas',
JOSE.Core.JWS in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWS.pas',
JOSE.Core.JWT in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWT.pas',
JOSE.Core.Parts in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Parts.pas',
- JOSE.Cryptography.RSA in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Cryptography.RSA.pas',
JOSE.Encoding.Base64 in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Encoding.Base64.pas',
JOSE.Hashing.HMAC in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Hashing.HMAC.pas',
+ JOSE.Signing.RSA in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Signing.RSA.pas',
+ JOSE.Types.Arrays in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.Arrays.pas',
JOSE.Types.Bytes in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.Bytes.pas',
- MARS.JOSEJWT.Token in '..\..\Source\MARS.JOSEJWT.Token.pas',
- MARS.JOSEJWT.Token.InjectionService in '..\..\Source\MARS.JOSEJWT.Token.InjectionService.pas';
+ JOSE.Types.JSON in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.JSON.pas';
end.
diff --git a/Packages/103Rio/MARS.JOSE.dproj b/Packages/103Rio/MARS.JOSE.dproj
index b7f4e8f2..4076d19b 100644
--- a/Packages/103Rio/MARS.JOSE.dproj
+++ b/Packages/103Rio/MARS.JOSE.dproj
@@ -2,7 +2,7 @@
{16057797-C497-46DA-B133-A45E7F564D8D}
MARS.JOSE.dpk
- 18.5
+ 18.8
None
True
Release
@@ -136,20 +136,30 @@
+
+
+
+
+
+
+
+
+
+
-
+
+
-
-
+
Cfg_2
Base
@@ -171,10 +181,8 @@
MARS.JOSE.dpk
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
@@ -183,12 +191,6 @@
true
-
-
- MARS_JOSE.bpl
- true
-
-
true
@@ -214,6 +216,18 @@
true
+
+
+ MARS_JOSE.bpl
+ true
+
+
+
+
+ MARS_JOSE.bpl
+ true
+
+
1
@@ -227,12 +241,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -245,12 +267,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -258,84 +294,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -405,6 +573,9 @@
0
+
+ 0
+
0
@@ -435,6 +606,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -446,6 +628,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -457,6 +672,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -468,6 +738,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -501,10 +881,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -548,6 +953,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -570,6 +979,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -607,6 +1022,7 @@
+
True
diff --git a/Packages/103Rio/MARS.ReadersAndWriters.dpk b/Packages/103Rio/MARS.ReadersAndWriters.dpk
index 015a5758..00ee25cf 100644
--- a/Packages/103Rio/MARS.ReadersAndWriters.dpk
+++ b/Packages/103Rio/MARS.ReadersAndWriters.dpk
@@ -9,23 +9,23 @@ package MARS.ReadersAndWriters;
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
-{$LOCALSYMBOLS OFF}
+{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
-{$OPTIMIZATION ON}
+{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
-{$REFERENCEINFO OFF}
+{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
-{$STACKFRAMES OFF}
+{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
-{$DEFINE RELEASE}
+{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
-{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$DESCRIPTION 'MARS-Curiosity Readers and Writers'}
{$LIBSUFFIX '260'}
{$RUNONLY}
{$IMPLICITBUILD OFF}
diff --git a/Packages/103Rio/MARS.ReadersAndWriters.dproj b/Packages/103Rio/MARS.ReadersAndWriters.dproj
index 7997e9a5..17160347 100644
--- a/Packages/103Rio/MARS.ReadersAndWriters.dproj
+++ b/Packages/103Rio/MARS.ReadersAndWriters.dproj
@@ -1,603 +1,992 @@
-
-
- {5170D912-4303-47AD-85A6-D77D3D0874DA}
- MARS.ReadersAndWriters.dpk
- 18.5
- None
- True
- Release
- Win32
- 131
- Package
-
-
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- true
- ..\..\Source;$(DCC_UnitSearchPath)
- true
- 260
- MARS-Curiosity REST Library
- CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
- 1040
- true
- System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
- true
- MARS_ReadersAndWriters
- ..\..\Lib260\$(Platform)\$(Config)
- .\$(Platform)\$(Config)
- false
- false
- false
- false
- false
-
-
- true
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- 1033
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
-
-
- 1033
- true
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug
-
-
- DEBUG;$(DCC_Define)
- true
- false
- true
- true
- true
-
-
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
- MARS-Curiosity Readers and Writers
- true
- 1033
- false
-
-
- true
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
-
-
- false
- RELEASE;$(DCC_Define)
- 0
- 0
-
-
- true
- 1033
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
-
-
-
- MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cfg_2
- Base
-
-
- Base
-
-
- Cfg_1
- Base
-
-
-
- Delphi.Personality.12
- Package
-
-
-
- MARS.ReadersAndWriters.dpk
-
-
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
-
-
-
-
-
- true
-
-
-
-
- MARS_ReadersAndWriters.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- 1
-
-
- 0
-
-
-
-
- classes
- 1
-
-
-
-
- res\xml
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- res\values-v21
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
- True
- True
-
-
- 12
-
-
-
-
-
+
+
+ {5170D912-4303-47AD-85A6-D77D3D0874DA}
+ MARS.ReadersAndWriters.dpk
+ 18.8
+ None
+ True
+ Release
+ Win32
+ 131
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 260
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_ReadersAndWriters
+ ..\..\Lib260\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity Readers and Writers
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.ReadersAndWriters.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_ReadersAndWriters.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/103Rio/MARS.ReadersAndWriters.res b/Packages/103Rio/MARS.ReadersAndWriters.res
index f389daf5..7039c993 100644
Binary files a/Packages/103Rio/MARS.ReadersAndWriters.res and b/Packages/103Rio/MARS.ReadersAndWriters.res differ
diff --git a/Packages/103Rio/MARS.UniDAC.dpk b/Packages/103Rio/MARS.UniDAC.dpk
new file mode 100644
index 00000000..304921fa
--- /dev/null
+++ b/Packages/103Rio/MARS.UniDAC.dpk
@@ -0,0 +1,47 @@
+package MARS.UniDAC;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '260'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ MARS.Core,
+ MARS.ReadersAndWriters,
+ unidac260,
+ dac260;
+
+contains
+ MARS.Data.UniDAC.InjectionService in '..\..\Source\MARS.Data.UniDAC.InjectionService.pas',
+ MARS.Data.UniDAC in '..\..\Source\MARS.Data.UniDAC.pas',
+ MARS.Data.UniDAC.ReadersAndWriters in '..\..\Source\MARS.Data.UniDAC.ReadersAndWriters.pas',
+ MARS.Data.UniDAC.Utils in '..\..\Source\MARS.Data.UniDAC.Utils.pas';
+
+end.
diff --git a/Packages/103Rio/MARS.UniDAC.dproj b/Packages/103Rio/MARS.UniDAC.dproj
new file mode 100644
index 00000000..db7e6063
--- /dev/null
+++ b/Packages/103Rio/MARS.UniDAC.dproj
@@ -0,0 +1,989 @@
+
+
+ {0B4F7444-23A8-436B-80C9-F0387EFF9DCA}
+ MARS.UniDAC.dpk
+ 18.8
+ FMX
+ True
+ Release
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 260
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_UniDAC
+ ..\..\Lib260\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ rtl;dbrtl;fmx;inet;IndySystem;IndyProtocols;IndyCore;FireDAC;FireDACCommonDriver;FireDACCommon;fmxFireDAC;dsnap;DataSnapFireDAC;$(DCC_UsePackage)
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity FireDAC
+ true
+ 1033
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.UniDAC.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_UniDAC.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_UniDAC.bpl
+ true
+
+
+
+
+ bplMARS_UniDAC.so
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/103Rio/MARS.UniDAC.res b/Packages/103Rio/MARS.UniDAC.res
new file mode 100644
index 00000000..9b419e54
Binary files /dev/null and b/Packages/103Rio/MARS.UniDAC.res differ
diff --git a/Packages/103Rio/MARS.Utils.dpk b/Packages/103Rio/MARS.Utils.dpk
index 87907dc2..5d05fd26 100644
--- a/Packages/103Rio/MARS.Utils.dpk
+++ b/Packages/103Rio/MARS.Utils.dpk
@@ -9,23 +9,23 @@ package MARS.Utils;
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
-{$LOCALSYMBOLS OFF}
+{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
-{$OPTIMIZATION ON}
+{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
-{$REFERENCEINFO OFF}
+{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
-{$STACKFRAMES OFF}
+{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
-{$DEFINE RELEASE}
+{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
-{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$DESCRIPTION 'MARS-Curiosity Utils'}
{$LIBSUFFIX '260'}
{$RUNONLY}
{$IMPLICITBUILD OFF}
@@ -51,6 +51,9 @@ contains
MARS.Core.Exceptions in '..\..\Source\MARS.Core.Exceptions.pas',
MARS.Core.Declarations in '..\..\Source\MARS.Core.Declarations.pas',
MARS.Core.MediaType in '..\..\Source\MARS.Core.MediaType.pas',
- MARS.Utils.JWT in '..\..\Source\MARS.Utils.JWT.pas';
+ MARS.Utils.JWT in '..\..\Source\MARS.Utils.JWT.pas',
+ MARS.Core.RequestAndResponse.Interfaces in '..\..\Source\MARS.Core.RequestAndResponse.Interfaces.pas';
end.
+
+
diff --git a/Packages/103Rio/MARS.Utils.dproj b/Packages/103Rio/MARS.Utils.dproj
index 11357f6b..29e50c05 100644
--- a/Packages/103Rio/MARS.Utils.dproj
+++ b/Packages/103Rio/MARS.Utils.dproj
@@ -1,616 +1,1006 @@
-
-
- {A5387B60-F9BE-4AEF-8E11-EFB0EDCAB2ED}
- MARS.Utils.dpk
- 18.5
- None
- True
- Release
- Win32
- 131
- Package
-
-
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Cfg_1
- true
- true
-
-
- true
- Base
- true
-
-
- true
- Cfg_2
- true
- true
-
-
- true
- ..\..\Source;$(DCC_UnitSearchPath)
- true
- 260
- MARS-Curiosity REST Library
- CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
- 1040
- true
- System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
- true
- MARS_Utils
- ..\..\Lib260\$(Platform)\$(Config)
- .\$(Platform)\$(Config)
- false
- false
- false
- false
- false
-
-
- true
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
- 1033
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
-
-
- 1033
- true
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
- Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
- Debug
-
-
- DEBUG;$(DCC_Define)
- true
- false
- true
- true
- true
-
-
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
- MARS-Curiosity Utils
- true
- 1033
- false
-
-
- true
- 1033
- CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
-
-
- false
- RELEASE;$(DCC_Define)
- 0
- 0
-
-
- true
- 1033
- CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
-
-
-
- MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Cfg_2
- Base
-
-
- Base
-
-
- Cfg_1
- Base
-
-
-
- Delphi.Personality.12
- Package
-
-
-
- MARS.Utils.dpk
-
-
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
-
-
-
-
-
- true
-
-
-
-
- MARS_Utils.bpl
- true
-
-
-
-
- MARS_Utils.bpl
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- true
-
-
-
-
- 1
-
-
- 0
-
-
-
-
- classes
- 1
-
-
-
-
- res\xml
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- library\lib\armeabi
- 1
-
-
-
-
- library\lib\mips
- 1
-
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\values
- 1
-
-
-
-
- res\values-v21
- 1
-
-
-
-
- res\drawable
- 1
-
-
-
-
- res\drawable-xxhdpi
- 1
-
-
-
-
- res\drawable-ldpi
- 1
-
-
-
-
- res\drawable-mdpi
- 1
-
-
-
-
- res\drawable-hdpi
- 1
-
-
-
-
- res\drawable-xhdpi
- 1
-
-
-
-
- res\drawable-small
- 1
-
-
-
-
- res\drawable-normal
- 1
-
-
-
-
- res\drawable-large
- 1
-
-
-
-
- res\drawable-xlarge
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
- .framework
-
-
- 1
- .framework
-
-
- 0
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .dll;.bpl
-
-
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 1
- .dylib
-
-
- 0
- .bpl
-
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
- ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
- 1
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- Contents\Resources
- 1
-
-
- Contents\Resources
- 1
-
-
-
-
- library\lib\armeabi-v7a
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 0
-
-
-
-
- 1
-
-
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
- Assets
- 1
-
-
- Assets
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
- True
- True
-
-
- 12
-
-
-
-
-
+
+
+ {A5387B60-F9BE-4AEF-8E11-EFB0EDCAB2ED}
+ MARS.Utils.dpk
+ 18.8
+ None
+ True
+ Release
+ Win32
+ 131
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 260
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_Utils
+ ..\..\Lib260\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity Utils
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.Utils.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_Utils.bpl
+ true
+
+
+
+
+ MARS_Utils.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/103Rio/MARS.Utils.res b/Packages/103Rio/MARS.Utils.res
index a098ca41..973053c2 100644
Binary files a/Packages/103Rio/MARS.Utils.res and b/Packages/103Rio/MARS.Utils.res differ
diff --git a/Packages/103Rio/MARS.groupproj b/Packages/103Rio/MARS.groupproj
index 50591fbf..9bf614c5 100644
--- a/Packages/103Rio/MARS.groupproj
+++ b/Packages/103Rio/MARS.groupproj
@@ -9,6 +9,9 @@
+
+
+
@@ -47,6 +50,15 @@
+
+
+
+
+
+
+
+
+
@@ -84,13 +96,13 @@
-
+
-
+
-
+
diff --git a/Packages/103Rio/MARS.mORMot.dpk b/Packages/103Rio/MARS.mORMot.dpk
index 67db9ee8..47901b85 100644
--- a/Packages/103Rio/MARS.mORMot.dpk
+++ b/Packages/103Rio/MARS.mORMot.dpk
@@ -44,6 +44,7 @@ contains
SynCrypto in '..\..\ThirdParty\mORMot\Source\SynCrypto.pas',
SynEcc in '..\..\ThirdParty\mORMot\Source\SynEcc.pas',
SynLZ in '..\..\ThirdParty\mORMot\Source\SynLZ.pas',
- MARS.mORMotJWT.Token.InjectionService in '..\..\Source\MARS.mORMotJWT.Token.InjectionService.pas';
+ MARS.mORMotJWT.Token.InjectionService in '..\..\Source\MARS.mORMotJWT.Token.InjectionService.pas',
+ SynTable in '..\..\ThirdParty\mORMot\Source\SynTable.pas';
end.
diff --git a/Packages/103Rio/MARS.mORMot.dproj b/Packages/103Rio/MARS.mORMot.dproj
index c89188a0..974ab08e 100644
--- a/Packages/103Rio/MARS.mORMot.dproj
+++ b/Packages/103Rio/MARS.mORMot.dproj
@@ -2,7 +2,7 @@
{CFDDCD9D-D0A9-42FE-8036-193E21B00BD9}
MARS.mORMot.dpk
- 18.5
+ 18.8
None
True
Release
@@ -143,6 +143,7 @@
+
Cfg_2
Base
@@ -164,10 +165,8 @@
MARS.mORMot.dpk
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
@@ -182,6 +181,12 @@
true
+
+
+ MARS_mORMot.bpl
+ true
+
+
true
@@ -220,12 +225,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -238,12 +251,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -251,84 +278,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -398,6 +557,9 @@
0
+
+ 0
+
0
@@ -428,6 +590,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -439,6 +612,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -450,6 +656,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -461,6 +722,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -494,10 +865,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -541,6 +937,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -563,6 +963,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -600,6 +1006,7 @@
+
True
diff --git a/Packages/103Rio/MARS.mORMot.res b/Packages/103Rio/MARS.mORMot.res
index 6f0c9b7e..75115b70 100644
Binary files a/Packages/103Rio/MARS.mORMot.res and b/Packages/103Rio/MARS.mORMot.res differ
diff --git a/Packages/103Rio/MARSClient.Core.dpk b/Packages/103Rio/MARSClient.Core.dpk
index 6652152c..10f9e95f 100644
--- a/Packages/103Rio/MARSClient.Core.dpk
+++ b/Packages/103Rio/MARSClient.Core.dpk
@@ -51,6 +51,7 @@ contains
MARS.Client.Utils in '..\..\Source\MARS.Client.Utils.pas',
MARS.Client.Client in '..\..\Source\MARS.Client.Client.pas',
MARS.Client.Client.Indy in '..\..\Source\MARS.Client.Client.Indy.pas',
- MARS.Client.Resource.FormData in '..\..\Source\MARS.Client.Resource.FormData.pas';
+ MARS.Client.Resource.FormData in '..\..\Source\MARS.Client.Resource.FormData.pas',
+ MARS.Client.Resource.FormUrlEncoded in '..\..\Source\MARS.Client.Resource.FormUrlEncoded.pas';
end.
diff --git a/Packages/103Rio/MARSClient.Core.dproj b/Packages/103Rio/MARSClient.Core.dproj
index 0f45b144..8f652bfc 100644
--- a/Packages/103Rio/MARSClient.Core.dproj
+++ b/Packages/103Rio/MARSClient.Core.dproj
@@ -2,7 +2,7 @@
{48E75129-EE24-48D4-AE54-2F549C909CC8}
MARSClient.Core.dpk
- 18.5
+ 18.8
FMX
True
Release
@@ -87,7 +87,7 @@
true
- 250
+ 260
MARS-Curiosity Client Core
1033
true
@@ -126,6 +126,7 @@
+
BITMAP
TMARSCLIENTMESSAGINGRESOURCE
@@ -195,10 +196,8 @@
MARSClient.Core.dpk
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
@@ -207,15 +206,8 @@
true
-
-
- MARSClient_Core.bpl
- true
-
-
-
-
- MARSClient_Core.bpl
+
+
true
@@ -229,6 +221,12 @@
true
+
+
+ MARSClient_Core.bpl
+ true
+
+
true
@@ -239,13 +237,14 @@
true
-
-
+
+
+ MARSClient_Core.bpl
true
-
-
+
+
true
@@ -262,12 +261,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -280,12 +287,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -293,84 +314,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -440,6 +593,9 @@
0
+
+ 0
+
0
@@ -470,6 +626,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -481,6 +648,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -492,6 +692,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -503,6 +758,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -536,10 +901,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -583,6 +973,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -605,6 +999,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -642,6 +1042,7 @@
+
True
diff --git a/Packages/103Rio/MARSClient.CoreDesign.dproj b/Packages/103Rio/MARSClient.CoreDesign.dproj
index 783e1067..ce455dd6 100644
--- a/Packages/103Rio/MARSClient.CoreDesign.dproj
+++ b/Packages/103Rio/MARSClient.CoreDesign.dproj
@@ -2,7 +2,7 @@
{8EEA5DAB-B80F-44EA-B149-45D051C20610}
MARSClient.CoreDesign.dpk
- 18.5
+ 18.8
FMX
True
Release
@@ -34,12 +34,6 @@
true
true
-
- true
- Cfg_1
- true
- true
-
true
Base
@@ -51,12 +45,6 @@
true
true
-
- true
- Cfg_2
- true
- true
-
260
../../Source/Core;../../Source/Data/FireDAC;$(DCC_UnitSearchPath)
@@ -82,12 +70,14 @@
rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;MARSClient.Core;$(DCC_UsePackage)
1033
true
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;$(DCC_UsePackage)
1033
true
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
@@ -99,15 +89,12 @@
true
+ 260
MARS-Curiosity Client Core
1033
true
false
-
- true
- 1033
-
false
RELEASE;$(DCC_Define)
@@ -117,10 +104,7 @@
true
1033
-
-
- true
- 1033
+ 260
@@ -165,6 +149,12 @@
true
+
+
+ MARSClient_CoreDesign.bpl
+ true
+
+
true
@@ -190,12 +180,6 @@
true
-
-
- MARSClient_CoreDesign.bpl
- true
-
-
true
@@ -214,12 +198,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -232,12 +224,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -245,84 +251,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -392,6 +530,9 @@
0
+
+ 0
+
0
@@ -422,6 +563,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -433,6 +585,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -444,6 +629,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -455,6 +695,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -488,10 +838,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -535,6 +910,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -557,6 +936,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -594,6 +979,7 @@
+
True
diff --git a/Packages/103Rio/MARSClient.CoreDesign.res b/Packages/103Rio/MARSClient.CoreDesign.res
index a19c3239..da606b6b 100644
Binary files a/Packages/103Rio/MARSClient.CoreDesign.res and b/Packages/103Rio/MARSClient.CoreDesign.res differ
diff --git a/Packages/103Rio/MARSClient.CoreResource.rc b/Packages/103Rio/MARSClient.CoreResource.rc
new file mode 100644
index 00000000..d2788dbf
--- /dev/null
+++ b/Packages/103Rio/MARSClient.CoreResource.rc
@@ -0,0 +1,12 @@
+TMARSCLIENTMESSAGINGRESOURCE BITMAP "..\\..\\media\\TMARSClientMessagingResource.bmp"
+TMARSCLIENTRESOURCE BITMAP "..\\..\\media\\TMARSClientResource.bmp"
+TMARSCLIENTRESOURCEJSON BITMAP "..\\..\\media\\TMARSClientResourceJSON.bmp"
+TMARSCLIENTRESOURCESTREAM BITMAP "..\\..\\media\\TMARSClientResourceStream.bmp"
+TMARSCLIENTSUBRESOURCE BITMAP "..\\..\\media\\TMARSClientSubResource.bmp"
+TMARSCLIENTSUBRESOURCEJSON BITMAP "..\\..\\media\\TMARSClientSubResourceJSON.bmp"
+TMARSCLIENTSUBRESOURCESTREAM BITMAP "..\\..\\media\\TMARSClientSubResourceStream.bmp"
+TMARSCLIENTTOKEN BITMAP "..\\..\\media\\TMARSClientToken.bmp"
+TMARSCLIENT BITMAP "..\\..\\media\\TMARSClient.bmp"
+TMARSCLIENTAPPLICATION BITMAP "..\\..\\media\\TMARSClientApplication.bmp"
+TMARSNETCLIENT BITMAP "..\\..\\media\\TMARSNetClient.bmp"
+TMARSCLIENTRESOURCEFORMDATA BITMAP "..\\..\\media\\TMARSClientResourceFormData.bmp"
diff --git a/Packages/103Rio/MARSClient.FireDAC.dproj b/Packages/103Rio/MARSClient.FireDAC.dproj
index 1fa3f2e1..2e954ac0 100644
--- a/Packages/103Rio/MARSClient.FireDAC.dproj
+++ b/Packages/103Rio/MARSClient.FireDAC.dproj
@@ -2,7 +2,7 @@
{29A0C2A3-BA6B-44DF-B909-A20D8DBF1B9B}
MARSClient.FireDAC.dpk
- 18.5
+ 18.8
FMX
True
Release
@@ -123,10 +123,8 @@
MARSClient.FireDAC.dpk
- DBExpress Enterprise Data Explorer Integration
- Microsoft Office 2000 Sample Automation Server Wrapper Components
- Microsoft Office XP Sample Automation Server Wrapper Components
- CodeSite Express 5.3.3
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
@@ -160,14 +158,14 @@
true
-
-
- MARSClient_FireDAC.bpl
+
+
true
-
-
+
+
+ MARSClient_FireDAC.bpl
true
@@ -184,12 +182,20 @@
classes
1
+
+ classes
+ 1
+
res\xml
1
+
+ res\xml
+ 1
+
@@ -202,12 +208,26 @@
library\lib\armeabi
1
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
library\lib\mips
1
+
+ library\lib\mips
+ 1
+
@@ -215,84 +235,216 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\values
1
+
+ res\values
+ 1
+
res\values-v21
1
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
res\drawable
1
+
+ res\drawable
+ 1
+
res\drawable-xxhdpi
1
+
+ res\drawable-xxhdpi
+ 1
+
res\drawable-ldpi
1
+
+ res\drawable-ldpi
+ 1
+
res\drawable-mdpi
1
+
+ res\drawable-mdpi
+ 1
+
res\drawable-hdpi
1
+
+ res\drawable-hdpi
+ 1
+
res\drawable-xhdpi
1
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
res\drawable-small
1
+
+ res\drawable-small
+ 1
+
res\drawable-normal
1
+
+ res\drawable-normal
+ 1
+
res\drawable-large
1
+
+ res\drawable-large
+ 1
+
res\drawable-xlarge
1
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
@@ -362,6 +514,9 @@
0
+
+ 0
+
0
@@ -392,6 +547,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -403,6 +569,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -414,6 +613,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -425,6 +679,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -458,10 +822,35 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
+
+ 1
+
@@ -505,6 +894,10 @@
library\lib\armeabi-v7a
1
+
+ library\lib\arm64-v8a
+ 1
+
1
@@ -527,6 +920,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -564,6 +963,7 @@
+
True
diff --git a/Packages/103Rio/MARSClient.FireDACDesign.dproj b/Packages/103Rio/MARSClient.FireDACDesign.dproj
index 6ab349c9..3a0bc7ba 100644
--- a/Packages/103Rio/MARSClient.FireDACDesign.dproj
+++ b/Packages/103Rio/MARSClient.FireDACDesign.dproj
@@ -2,7 +2,7 @@
{6F52BB40-74E2-410E-A54D-0C20E713A0CE}
MARSClient.FireDACDesign.dpk
- 18.5
+ 18.8
FMX
True
Release
@@ -62,7 +62,7 @@
true
- rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARSClient.FireDAC;MARSClient.CoreDesign250;MARSClient.FireDAC250;$(DCC_UsePackage)
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARSClient.FireDAC;MARSClient.CoreDesign260;MARSClient.FireDAC260;$(DCC_UsePackage)
1033
true
CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
@@ -77,7 +77,7 @@
true
- 250
+ 260
MARS-Curiosity Client FireDAC
1033
true
@@ -159,7 +159,7 @@
true
-
+
MARSClient_FireDACDesign.bpl
true
@@ -202,6 +202,12 @@
1
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
library\lib\mips
@@ -215,6 +221,12 @@
1
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
res\drawable
@@ -233,6 +245,16 @@
1
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
res\drawable
@@ -269,6 +291,56 @@
1
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
res\drawable-small
@@ -293,6 +365,16 @@
1
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
1
@@ -391,6 +473,17 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -402,6 +495,39 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -413,6 +539,61 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -424,6 +605,116 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -457,6 +748,28 @@
1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
1
@@ -526,6 +839,12 @@
0
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
1
@@ -563,6 +882,7 @@
+
True
diff --git a/Packages/104Sydney/MARS.Core.dpk b/Packages/104Sydney/MARS.Core.dpk
new file mode 100644
index 00000000..089e5f6e
--- /dev/null
+++ b/Packages/104Sydney/MARS.Core.dpk
@@ -0,0 +1,68 @@
+package MARS.Core;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity Core'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ inet,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ xmlrtl,
+ dsnap,
+ MARS.Utils;
+
+contains
+ MARS.Core.Application in '..\..\Source\MARS.Core.Application.pas',
+ MARS.Core.Attributes in '..\..\Source\MARS.Core.Attributes.pas',
+ MARS.Core.Cache in '..\..\Source\MARS.Core.Cache.pas',
+ MARS.Core.Classes in '..\..\Source\MARS.Core.Classes.pas',
+ MARS.Core.Engine in '..\..\Source\MARS.Core.Engine.pas',
+ MARS.Core.MessageBodyReader in '..\..\Source\MARS.Core.MessageBodyReader.pas',
+ MARS.Core.MessageBodyWriter in '..\..\Source\MARS.Core.MessageBodyWriter.pas',
+ MARS.Core.Registry in '..\..\Source\MARS.Core.Registry.pas',
+ MARS.Core.Response in '..\..\Source\MARS.Core.Response.pas',
+ MARS.Core.Token in '..\..\Source\MARS.Core.Token.pas',
+ MARS.http.Core in '..\..\Source\MARS.http.Core.pas',
+ MARS.Core.Activation in '..\..\Source\MARS.Core.Activation.pas',
+ MARS.Core.Injection.Interfaces in '..\..\Source\MARS.Core.Injection.Interfaces.pas',
+ MARS.Core.Injection in '..\..\Source\MARS.Core.Injection.pas',
+ MARS.Core.Injection.Types in '..\..\Source\MARS.Core.Injection.Types.pas',
+ MARS.Core.Activation.InjectionService in '..\..\Source\MARS.Core.Activation.InjectionService.pas',
+ MARS.Core.Activation.Interfaces in '..\..\Source\MARS.Core.Activation.Interfaces.pas',
+ MARS.Core.Registry.Utils in '..\..\Source\MARS.Core.Registry.Utils.pas';
+
+end.
+
+
+
+
diff --git a/Packages/104Sydney/MARS.Core.dproj b/Packages/104Sydney/MARS.Core.dproj
new file mode 100644
index 00000000..3224e9c2
--- /dev/null
+++ b/Packages/104Sydney/MARS.Core.dproj
@@ -0,0 +1,770 @@
+
+
+ {8C6A1564-94E6-420D-BDE4-54A4CD3BD125}
+ MARS.Core.dpk
+ True
+ Release
+ 131
+ Package
+ None
+ 19.0
+ Win32
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ false
+ false
+ false
+ false
+ false
+ 00400000
+ true
+ true
+ MARS_Core
+ MARS-Curiosity Core
+ 270
+ true
+ true
+ 1040
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ ..\..\Source;$(DCC_UnitSearchPath)
+ ..\..\Lib270\$(Platform)\$(Config)
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+ 1033
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ 1033
+
+
+ RELEASE;$(DCC_Define)
+ 0
+ false
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName)
+
+
+ DEBUG;$(DCC_Define)
+ false
+ true
+
+
+ Debug
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.Core.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+ False
+ False
+ False
+ False
+ True
+ True
+ True
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.DCS.dpk b/Packages/104Sydney/MARS.DCS.dpk
new file mode 100644
index 00000000..df091358
--- /dev/null
+++ b/Packages/104Sydney/MARS.DCS.dpk
@@ -0,0 +1,57 @@
+package MARS.DCS;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library - DelphiCrossSocket support'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ MARS.Utils,
+ MARS.Core;
+
+contains
+ MARS.http.Server.DCS in '..\..\Source\MARS.http.Server.DCS.pas',
+ Net.CrossHttpMiddleware in '..\..\ThirdParty\DCS\Net\Net.CrossHttpMiddleware.pas',
+ Net.CrossHttpParams in '..\..\ThirdParty\DCS\Net\Net.CrossHttpParams.pas',
+ Net.CrossHttpRouter in '..\..\ThirdParty\DCS\Net\Net.CrossHttpRouter.pas',
+ Net.CrossHttpServer in '..\..\ThirdParty\DCS\Net\Net.CrossHttpServer.pas',
+ Net.CrossHttpUtils in '..\..\ThirdParty\DCS\Net\Net.CrossHttpUtils.pas',
+ Net.CrossServer in '..\..\ThirdParty\DCS\Net\Net.CrossServer.pas',
+ Net.CrossSocket.Iocp in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.Iocp.pas',
+ Net.CrossSocket in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.pas',
+ Net.SocketAPI in '..\..\ThirdParty\DCS\Net\Net.SocketAPI.pas',
+ Net.Winsock2 in '..\..\ThirdParty\DCS\Net\Net.Winsock2.pas',
+ Net.Wship6 in '..\..\ThirdParty\DCS\Net\Net.Wship6.pas',
+ Net.CrossSocket.Base in '..\..\ThirdParty\DCS\Net\Net.CrossSocket.Base.pas',
+ Utils.DateTime in '..\..\ThirdParty\DCS\Utils\Utils.DateTime.pas',
+ Utils.Logger in '..\..\ThirdParty\DCS\Utils\Utils.Logger.pas',
+ Utils.RegEx in '..\..\ThirdParty\DCS\Utils\Utils.RegEx.pas',
+ Utils.Utils in '..\..\ThirdParty\DCS\Utils\Utils.Utils.pas';
+
+end.
diff --git a/Packages/104Sydney/MARS.DCS.dproj b/Packages/104Sydney/MARS.DCS.dproj
new file mode 100644
index 00000000..62a4d12c
--- /dev/null
+++ b/Packages/104Sydney/MARS.DCS.dproj
@@ -0,0 +1,1117 @@
+
+
+ {02BBCED0-86EE-4FB8-A124-5BD6E5477506}
+ MARS.DCS.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ true
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ All
+ MARS_DCS
+ true
+ true
+ 1040
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ MARS-Curiosity REST Library - DelphiCrossSocket support
+ 270
+ ..\..\Source;$(DCC_UnitSearchPath)
+
+
+ None
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=
+ Debug
+ true
+ Base
+ true
+ None
+ android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services-ads-7.0.0.dex.jar;google-play-services-analytics-7.0.0.dex.jar;google-play-services-base-7.0.0.dex.jar;google-play-services-gcm-7.0.0.dex.jar;google-play-services-identity-7.0.0.dex.jar;google-play-services-maps-7.0.0.dex.jar;google-play-services-panorama-7.0.0.dex.jar;google-play-services-plus-7.0.0.dex.jar;google-play-services-wallet-7.0.0.dex.jar
+
+
+ None
+
+
+ None
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ Debug
+ true
+ 1033
+
+
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+ true
+ 1033
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ false
+ true
+ 1033
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.DCS.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_DCS.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ False
+ False
+ False
+ False
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.FireDAC.dpk b/Packages/104Sydney/MARS.FireDAC.dpk
new file mode 100644
index 00000000..c22644a3
--- /dev/null
+++ b/Packages/104Sydney/MARS.FireDAC.dpk
@@ -0,0 +1,59 @@
+package MARS.FireDAC;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ FireDAC,
+ FireDACCommonDriver,
+ FireDACCommon,
+ inet,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ dsnap,
+ MARS.Core,
+ MARS.ReadersAndWriters;
+
+contains
+ MARS.Data.FireDAC.DataModule in '..\..\Source\MARS.Data.FireDAC.DataModule.pas' {MARSFDDataModuleResource: TDataModule},
+ MARS.Data.FireDAC.ReadersAndWriters in '..\..\Source\MARS.Data.FireDAC.ReadersAndWriters.pas',
+ MARS.Data.FireDAC in '..\..\Source\MARS.Data.FireDAC.pas',
+ MARS.Data.FireDAC.InjectionService in '..\..\Source\MARS.Data.FireDAC.InjectionService.pas',
+ MARS.Data.FireDAC.Resources in '..\..\Source\MARS.Data.FireDAC.Resources.pas',
+ MARS.Data.FireDAC.Utils in '..\..\Source\MARS.Data.FireDAC.Utils.pas';
+
+end.
+
+
+
+
diff --git a/Packages/104Sydney/MARS.FireDAC.dproj b/Packages/104Sydney/MARS.FireDAC.dproj
new file mode 100644
index 00000000..55439df2
--- /dev/null
+++ b/Packages/104Sydney/MARS.FireDAC.dproj
@@ -0,0 +1,1062 @@
+
+
+ {D44362A0-1BCF-45FD-80B4-281FB36C0E08}
+ MARS.FireDAC.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ 270
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_FireDAC
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ rtl;dbrtl;fmx;inet;IndySystem;IndyProtocols;IndyCore;FireDAC;FireDACCommonDriver;FireDACCommon;fmxFireDAC;dsnap;DataSnapFireDAC;$(DCC_UsePackage)
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity FireDAC
+ true
+ 1033
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dfm
+ TDataModule
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.FireDAC.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ bplMARS_FireDAC.so
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_FireDAC.bpl
+ true
+
+
+
+
+ MARS_FireDAC.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.JOSE.dpk b/Packages/104Sydney/MARS.JOSE.dpk
new file mode 100644
index 00000000..e1a81f4b
--- /dev/null
+++ b/Packages/104Sydney/MARS.JOSE.dpk
@@ -0,0 +1,70 @@
+package MARS.JOSE;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ MARS.Utils,
+ MARS.Core;
+
+contains
+ MARS.JOSEJWT.Token in '..\..\Source\MARS.JOSEJWT.Token.pas',
+ MARS.JOSEJWT.Token.InjectionService in '..\..\Source\MARS.JOSEJWT.Token.InjectionService.pas',
+ JOSE.Builder in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Builder.pas',
+ JOSE.Consumer in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Consumer.pas',
+ JOSE.Consumer.Validators in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Consumer.Validators.pas',
+ JOSE.Context in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Context.pas',
+ JOSE.Core.Base in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Base.pas',
+ JOSE.Core.Builder in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Builder.pas',
+ JOSE.Core.JWA.Compression in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Compression.pas',
+ JOSE.Core.JWA.Encryption in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Encryption.pas',
+ JOSE.Core.JWA.Factory in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Factory.pas',
+ JOSE.Core.JWA in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.pas',
+ JOSE.Core.JWA.Signing in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWA.Signing.pas',
+ JOSE.Core.JWE in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWE.pas',
+ JOSE.Core.JWK in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWK.pas',
+ JOSE.Core.JWS in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWS.pas',
+ JOSE.Core.JWT in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.JWT.pas',
+ JOSE.Core.Parts in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Core.Parts.pas',
+ JOSE.Encoding.Base64 in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Encoding.Base64.pas',
+ JOSE.Hashing.HMAC in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Hashing.HMAC.pas',
+ JOSE.Signing.RSA in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Signing.RSA.pas',
+ JOSE.Types.Arrays in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.Arrays.pas',
+ JOSE.Types.Bytes in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.Bytes.pas',
+ JOSE.Types.JSON in '..\..\ThirdParty\delphi-jose-jwt\Source\JOSE.Types.JSON.pas';
+
+end.
+
+
+
diff --git a/Packages/104Sydney/MARS.JOSE.dproj b/Packages/104Sydney/MARS.JOSE.dproj
new file mode 100644
index 00000000..561b3025
--- /dev/null
+++ b/Packages/104Sydney/MARS.JOSE.dproj
@@ -0,0 +1,1098 @@
+
+
+ {16057797-C497-46DA-B133-A45E7F564D8D}
+ MARS.JOSE.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 270
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_JOSE
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity JOSE
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.JOSE.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_JOSE.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_JOSE.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.ReadersAndWriters.dpk b/Packages/104Sydney/MARS.ReadersAndWriters.dpk
new file mode 100644
index 00000000..5047895f
--- /dev/null
+++ b/Packages/104Sydney/MARS.ReadersAndWriters.dpk
@@ -0,0 +1,49 @@
+package MARS.ReadersAndWriters;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ inet,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ dsnap,
+ MARS.Utils,
+ MARS.Core;
+
+contains
+ MARS.Core.MessageBodyWriters in '..\..\Source\MARS.Core.MessageBodyWriters.pas',
+ MARS.Data.MessageBodyWriters in '..\..\Source\MARS.Data.MessageBodyWriters.pas',
+ MARS.Core.MessageBodyReaders in '..\..\Source\MARS.Core.MessageBodyReaders.pas';
+
+end.
diff --git a/Packages/104Sydney/MARS.ReadersAndWriters.dproj b/Packages/104Sydney/MARS.ReadersAndWriters.dproj
new file mode 100644
index 00000000..b0f45927
--- /dev/null
+++ b/Packages/104Sydney/MARS.ReadersAndWriters.dproj
@@ -0,0 +1,1070 @@
+
+
+ {5170D912-4303-47AD-85A6-D77D3D0874DA}
+ MARS.ReadersAndWriters.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 131
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 270
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_ReadersAndWriters
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity Readers and Writers
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.ReadersAndWriters.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARS_ReadersAndWriters.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_ReadersAndWriters.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.Utils.dpk b/Packages/104Sydney/MARS.Utils.dpk
new file mode 100644
index 00000000..214c65ad
--- /dev/null
+++ b/Packages/104Sydney/MARS.Utils.dpk
@@ -0,0 +1,59 @@
+package MARS.Utils;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ inet,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ RESTComponents;
+
+contains
+ MARS.Core.Utils in '..\..\Source\MARS.Core.Utils.pas',
+ MARS.Data.Utils in '..\..\Source\MARS.Data.Utils.pas',
+ MARS.Rtti.Utils in '..\..\Source\MARS.Rtti.Utils.pas',
+ MARS.Utils.Parameters.IniFile in '..\..\Source\MARS.Utils.Parameters.IniFile.pas',
+ MARS.Utils.Parameters in '..\..\Source\MARS.Utils.Parameters.pas',
+ MARS.Utils.Parameters.JSON in '..\..\Source\MARS.Utils.Parameters.JSON.pas',
+ MARS.Core.JSON in '..\..\Source\MARS.Core.JSON.pas',
+ MARS.Core.URL in '..\..\Source\MARS.Core.URL.pas',
+ MARS.Core.Exceptions in '..\..\Source\MARS.Core.Exceptions.pas',
+ MARS.Core.Declarations in '..\..\Source\MARS.Core.Declarations.pas',
+ MARS.Core.MediaType in '..\..\Source\MARS.Core.MediaType.pas',
+ MARS.Utils.JWT in '..\..\Source\MARS.Utils.JWT.pas',
+ MARS.Core.RequestAndResponse.Interfaces in '..\..\Source\MARS.Core.RequestAndResponse.Interfaces.pas';
+
+end.
+
+
diff --git a/Packages/104Sydney/MARS.Utils.dproj b/Packages/104Sydney/MARS.Utils.dproj
new file mode 100644
index 00000000..e0729929
--- /dev/null
+++ b/Packages/104Sydney/MARS.Utils.dproj
@@ -0,0 +1,1078 @@
+
+
+ {A5387B60-F9BE-4AEF-8E11-EFB0EDCAB2ED}
+ MARS.Utils.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 131
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 270
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_Utils
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity Utils
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.Utils.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_Utils.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_Utils.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.groupproj b/Packages/104Sydney/MARS.groupproj
new file mode 100644
index 00000000..9bf614c5
--- /dev/null
+++ b/Packages/104Sydney/MARS.groupproj
@@ -0,0 +1,108 @@
+
+
+ {79526BDC-090B-468F-A29A-B97CAFE42EA6}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/104Sydney/MARS.mORMot.dpk b/Packages/104Sydney/MARS.mORMot.dpk
new file mode 100644
index 00000000..949786c7
--- /dev/null
+++ b/Packages/104Sydney/MARS.mORMot.dpk
@@ -0,0 +1,50 @@
+package MARS.mORMot;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ MARS.Utils,
+ MARS.Core;
+
+contains
+ MARS.mORMotJWT.Token in '..\..\Source\MARS.mORMotJWT.Token.pas',
+ SynCommons in '..\..\ThirdParty\mORMot\Source\SynCommons.pas',
+ SynCrypto in '..\..\ThirdParty\mORMot\Source\SynCrypto.pas',
+ SynEcc in '..\..\ThirdParty\mORMot\Source\SynEcc.pas',
+ SynLZ in '..\..\ThirdParty\mORMot\Source\SynLZ.pas',
+ MARS.mORMotJWT.Token.InjectionService in '..\..\Source\MARS.mORMotJWT.Token.InjectionService.pas',
+ SynTable in '..\..\ThirdParty\mORMot\Source\SynTable.pas';
+
+end.
diff --git a/Packages/104Sydney/MARS.mORMot.dproj b/Packages/104Sydney/MARS.mORMot.dproj
new file mode 100644
index 00000000..50a5f0d1
--- /dev/null
+++ b/Packages/104Sydney/MARS.mORMot.dproj
@@ -0,0 +1,1083 @@
+
+
+ {CFDDCD9D-D0A9-42FE-8036-193E21B00BD9}
+ MARS.mORMot.dpk
+ 19.0
+ None
+ True
+ Release
+ Win32
+ 131
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ true
+ ..\..\Source;$(DCC_UnitSearchPath)
+ true
+ 270
+ MARS-Curiosity REST Library
+ CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=
+ 1040
+ true
+ System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)
+ true
+ MARS_mORMot
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ 1033
+ true
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+ Debug
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ MARS-Curiosity mORMot JWT
+ true
+ 1033
+ false
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+
+
+ true
+ 1033
+ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARS.mORMot.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_mORMot.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARS_mORMot.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.Core.dpk b/Packages/104Sydney/MARSClient.Core.dpk
new file mode 100644
index 00000000..13c439e1
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.Core.dpk
@@ -0,0 +1,57 @@
+package MARSClient.Core;
+
+{$R *.res}
+{$R *.dres}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library (Client)'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ inet,
+ IndySystem,
+ IndyProtocols,
+ IndyCore,
+ MARS.Utils;
+
+contains
+ MARS.Client.Application in '..\..\Source\MARS.Client.Application.pas',
+ MARS.Client.Client.Net in '..\..\Source\MARS.Client.Client.Net.pas',
+ MARS.Client.CustomResource in '..\..\Source\MARS.Client.CustomResource.pas',
+ MARS.Client.Resource.JSON in '..\..\Source\MARS.Client.Resource.JSON.pas',
+ MARS.Client.Resource in '..\..\Source\MARS.Client.Resource.pas',
+ MARS.Client.Resource.Stream in '..\..\Source\MARS.Client.Resource.Stream.pas',
+ MARS.Client.Token in '..\..\Source\MARS.Client.Token.pas',
+ MARS.Client.Utils in '..\..\Source\MARS.Client.Utils.pas',
+ MARS.Client.Client in '..\..\Source\MARS.Client.Client.pas',
+ MARS.Client.Client.Indy in '..\..\Source\MARS.Client.Client.Indy.pas',
+ MARS.Client.Resource.FormData in '..\..\Source\MARS.Client.Resource.FormData.pas',
+ MARS.Client.Resource.FormUrlEncoded in '..\..\Source\MARS.Client.Resource.FormUrlEncoded.pas';
+
+end.
diff --git a/Packages/104Sydney/MARSClient.Core.dproj b/Packages/104Sydney/MARSClient.Core.dproj
new file mode 100644
index 00000000..59576bdb
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.Core.dproj
@@ -0,0 +1,1118 @@
+
+
+ {48E75129-EE24-48D4-AE54-2F549C909CC8}
+ MARSClient.Core.dpk
+ 19.0
+ FMX
+ True
+ Release
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ ../../Source/Core;../../Source/Data/FireDAC;$(DCC_UnitSearchPath)
+ MARS-Curiosity REST Library (Client)
+ -LUDesignIDE
+ System;Xml;Data;Datasnap;Web;Soap;Winapi;Vcl;$(DCC_Namespace)
+ true
+ MARSClient_Core
+ true
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ 2057
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ true
+ true
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;$(DCC_UsePackage)
+ 1033
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;$(DCC_UsePackage)
+ 1033
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ 260
+ MARS-Curiosity Client Core
+ 1033
+ true
+ false
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BITMAP
+ TMARSCLIENTMESSAGINGRESOURCE
+
+
+ BITMAP
+ TMARSCLIENTRESOURCE
+
+
+ BITMAP
+ TMARSCLIENTRESOURCEJSON
+
+
+ BITMAP
+ TMARSCLIENTRESOURCESTREAM
+
+
+ BITMAP
+ TMARSCLIENTSUBRESOURCE
+
+
+ BITMAP
+ TMARSCLIENTSUBRESOURCEJSON
+
+
+ BITMAP
+ TMARSCLIENTSUBRESOURCESTREAM
+
+
+ BITMAP
+ TMARSCLIENTTOKEN
+
+
+ BITMAP
+ TMARSCLIENT
+
+
+ BITMAP
+ TMARSCLIENTAPPLICATION
+
+
+ BITMAP
+ TMARSNETCLIENT
+
+
+ BITMAP
+ TMARSCLIENTRESOURCEFORMDATA
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARSClient.Core.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARSClient_Core.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSClient_Core.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.CoreDesign.dpk b/Packages/104Sydney/MARSClient.CoreDesign.dpk
new file mode 100644
index 00000000..80d1e6a9
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.CoreDesign.dpk
@@ -0,0 +1,46 @@
+package MARSClient.CoreDesign;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library (Client)'}
+{$LIBSUFFIX '270'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ bindengine,
+ bindcomp,
+ MARSClient.Core;
+
+contains
+ MARS.Client.Utils.LiveBindings in '..\..\Source\MARS.Client.Utils.LiveBindings.pas',
+ MARS.Client.Register in '..\..\Source\MARS.Client.Register.pas',
+ MARS.Client.CustomResource.Editor in '..\..\Source\MARS.Client.CustomResource.Editor.pas';
+
+end.
+
+
+
diff --git a/Packages/104Sydney/MARSClient.CoreDesign.dproj b/Packages/104Sydney/MARSClient.CoreDesign.dproj
new file mode 100644
index 00000000..548795e2
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.CoreDesign.dproj
@@ -0,0 +1,1058 @@
+
+
+ {8EEA5DAB-B80F-44EA-B149-45D051C20610}
+ MARSClient.CoreDesign.dpk
+ 19.0
+ FMX
+ True
+ Release
+ Win32
+ 3
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ ../../Source/Core;../../Source/Data/FireDAC;$(DCC_UnitSearchPath)
+ MARS-Curiosity REST Library (Client)
+ -LUDesignIDE
+ System;Xml;Data;Datasnap;Web;Soap;Winapi;Vcl;$(DCC_Namespace)
+ true
+ MARSClient_CoreDesign
+ true
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ 2057
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ true
+ true
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;MARSClient.Core;$(DCC_UsePackage)
+ 1033
+ true
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARS.Utils;$(DCC_UsePackage)
+ 1033
+ true
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ 260
+ MARS-Curiosity Client Core
+ 1033
+ true
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARSClient.CoreDesign.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ MARSClient_CoreDesign.bpl
+ true
+
+
+
+
+ MARSClient_CoreDesign.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.FireDAC.dpk b/Packages/104Sydney/MARSClient.FireDAC.dpk
new file mode 100644
index 00000000..e4734309
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.FireDAC.dpk
@@ -0,0 +1,49 @@
+package MARSClient.FireDAC;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library (Client)'}
+{$LIBSUFFIX '270'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ MARSClient.Core,
+ FireDAC,
+ FireDACCommonDriver,
+ FireDACCommon;
+
+contains
+ MARS.Client.FireDAC in '..\..\Source\MARS.Client.FireDAC.pas',
+ MARS.Data.FireDAC.Utils in '..\..\Source\MARS.Data.FireDAC.Utils.pas';
+
+end.
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.FireDAC.dproj b/Packages/104Sydney/MARSClient.FireDAC.dproj
new file mode 100644
index 00000000..06ea1514
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.FireDAC.dproj
@@ -0,0 +1,1044 @@
+
+
+ {29A0C2A3-BA6B-44DF-B909-A20D8DBF1B9B}
+ MARSClient.FireDAC.dpk
+ 19.0
+ FMX
+ True
+ Release
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ ../../Source/Core;../../Source/Data/FireDAC;$(DCC_UnitSearchPath)
+ MARS-Curiosity REST Library (Client)
+ -LUDesignIDE
+ System;Xml;Data;Datasnap;Web;Soap;Winapi;Vcl;$(DCC_Namespace)
+ true
+ MARSClient_FireDAC
+ true
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ 2057
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ true
+ true
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;$(DCC_UsePackage)
+ 1033
+ true
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ MARS-Curiosity Client FireDAC
+ 1033
+ true
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARSClient.FireDAC.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSClient_FireDAC.bpl
+ true
+
+
+
+
+ MARSClient_FireDAC.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.FireDACDesign.dpk b/Packages/104Sydney/MARSClient.FireDACDesign.dpk
new file mode 100644
index 00000000..7b0a2a7e
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.FireDACDesign.dpk
@@ -0,0 +1,46 @@
+package MARSClient.FireDACDesign;
+
+{$R *.res}
+{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO OFF}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS OFF}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO OFF}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DEFINE RELEASE}
+{$ENDIF IMPLICITBUILDING}
+{$DESCRIPTION 'MARS-Curiosity REST Library (Client) - FireDAC'}
+{$LIBSUFFIX '270'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ MARSClient.FireDAC,
+ MARSClient.CoreDesign;
+
+contains
+ MARS.Data.FireDAC.Editor in '..\..\Source\MARS.Data.FireDAC.Editor.pas',
+ MARS.Client.FireDAC.Register in '..\..\Source\MARS.Client.FireDAC.Register.pas';
+
+end.
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.FireDACDesign.dproj b/Packages/104Sydney/MARSClient.FireDACDesign.dproj
new file mode 100644
index 00000000..937f937b
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.FireDACDesign.dproj
@@ -0,0 +1,1043 @@
+
+
+ {6F52BB40-74E2-410E-A54D-0C20E713A0CE}
+ MARSClient.FireDACDesign.dpk
+ 19.0
+ FMX
+ True
+ Release
+ Win32
+ 1
+ Package
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_1
+ true
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Cfg_2
+ true
+ true
+
+
+ 270
+ true
+ ../../Source/Core;../../Source/Data/FireDAC;$(DCC_UnitSearchPath)
+ MARS-Curiosity REST Library (Client) - FireDAC
+ -LUDesignIDE
+ System;Xml;Data;Datasnap;Web;Soap;Winapi;Vcl;$(DCC_Namespace)
+ true
+ MARSClient_FireDACDesign
+ true
+ ..\..\Lib270\$(Platform)\$(Config)
+ .\$(Platform)\$(Config)
+ false
+ false
+ false
+ false
+ false
+ 2057
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)
+ true
+
+
+ rtl;inet;DbxCommonDriver;dbrtl;FireDACCommon;FireDACCommonDriver;FireDAC;DataSnapFireDAC;IndySystem;IndyProtocols;IndyCore;bindengine;bindcomp;MARSClient.FireDAC;MARSClient.CoreDesign260;MARSClient.FireDAC260;$(DCC_UsePackage)
+ 1033
+ true
+ CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)
+ System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)
+
+
+ DEBUG;$(DCC_Define)
+ true
+ false
+ true
+ true
+ true
+
+
+ 260
+ MARS-Curiosity Client FireDAC
+ 1033
+ true
+ false
+
+
+ false
+ RELEASE;$(DCC_Define)
+ 0
+ 0
+
+
+ true
+ 1033
+
+
+
+ MainSource
+
+
+
+
+
+
+ Cfg_2
+ Base
+
+
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ MARSClient.FireDACDesign.dpk
+
+
+ Microsoft Office 2000 Sample Automation Server Wrapper Components
+ Microsoft Office XP Sample Automation Server Wrapper Components
+
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSClient_FireDACDesign.bpl
+ true
+
+
+
+
+ true
+
+
+
+
+ MARSClient_FireDACDesign.bpl
+ true
+
+
+
+
+ 1
+
+
+ 0
+
+
+
+
+ classes
+ 1
+
+
+ classes
+ 1
+
+
+
+
+ res\xml
+ 1
+
+
+ res\xml
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\armeabi
+ 1
+
+
+ library\lib\armeabi
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ library\lib\mips
+ 1
+
+
+ library\lib\mips
+ 1
+
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\values-v21
+ 1
+
+
+ res\values-v21
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ res\drawable
+ 1
+
+
+ res\drawable
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-ldpi
+ 1
+
+
+ res\drawable-ldpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-mdpi
+ 1
+
+
+ res\drawable-mdpi
+ 1
+
+
+
+
+ res\drawable-hdpi
+ 1
+
+
+ res\drawable-hdpi
+ 1
+
+
+
+
+ res\drawable-xhdpi
+ 1
+
+
+ res\drawable-xhdpi
+ 1
+
+
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+ res\drawable-xxhdpi
+ 1
+
+
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+ res\drawable-xxxhdpi
+ 1
+
+
+
+
+ res\drawable-small
+ 1
+
+
+ res\drawable-small
+ 1
+
+
+
+
+ res\drawable-normal
+ 1
+
+
+ res\drawable-normal
+ 1
+
+
+
+
+ res\drawable-large
+ 1
+
+
+ res\drawable-large
+ 1
+
+
+
+
+ res\drawable-xlarge
+ 1
+
+
+ res\drawable-xlarge
+ 1
+
+
+
+
+ res\values
+ 1
+
+
+ res\values
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ 1
+ .framework
+
+
+ 1
+ .framework
+
+
+ 0
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .dll;.bpl
+
+
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 1
+ .dylib
+
+
+ 0
+ .bpl
+
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+ ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+ ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF
+ 1
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+ Contents\Resources
+ 1
+
+
+ Contents\Resources
+ 1
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+ library\lib\arm64-v8a
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 0
+
+
+
+
+ library\lib\armeabi-v7a
+ 1
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+ Assets
+ 1
+
+
+ Assets
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ 12
+
+
+
+
+
diff --git a/Packages/104Sydney/MARSClient.groupproj b/Packages/104Sydney/MARSClient.groupproj
new file mode 100644
index 00000000..41ffc820
--- /dev/null
+++ b/Packages/104Sydney/MARSClient.groupproj
@@ -0,0 +1,84 @@
+
+
+ {8B31503E-A2F0-4933-8CB5-13BB39CA0F69}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/MARS.Client.Client.Net.pas b/Source/MARS.Client.Client.Net.pas
index d57eb084..07476414 100644
--- a/Source/MARS.Client.Client.Net.pas
+++ b/Source/MARS.Client.Client.Net.pas
@@ -11,11 +11,11 @@ interface
uses
SysUtils, Classes
- , MARS.Core.JSON, MARS.Client.Utils, MARS.Core.Utils, MARS.Client.Client
+ , MARS.Core.JSON, MARS.Client.Utils, MARS.Core.Utils, MARS.Client.Client, MARS.Utils.Parameters
// Net
, System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent
- , System.Net.Mime
+, System.Net.Mime
;
type
@@ -38,7 +38,6 @@ TMARSNetClient = class(TMARSCustomClient)
function CreateMultipartFormData(AFormData: TArray): TMultipartFormData;
-
procedure EndorseAuthorization; override;
procedure CheckLastCmdSuccess; virtual;
procedure ApplyProxyConfig; override;
@@ -58,6 +57,9 @@ TMARSNetClient = class(TMARSCustomClient)
procedure Post(const AURL: string; const AFormData: TArray;
const AResponse: TStream;
const AAuthToken: string; const AAccept: string; const AContentType: string); override;
+ procedure Post(const AURL: string; const AFormUrlEncoded: TMARSParameters;
+ const AResponse: TStream;
+ const AAuthToken: string; const AAccept: string; const AContentType: string); override;
procedure Put(const AURL: string; AContent, AResponse: TStream;
const AAuthToken: string; const AAccept: string; const AContentType: string); override;
@@ -254,10 +256,8 @@ function TMARSNetClient.GetReadTimeout: Integer;
function TMARSNetClient.LastCmdSuccess: Boolean;
begin
- if assigned(FLastResponse) then
- Result := (FLastResponse.StatusCode >= 200) and (FLastResponse.StatusCode < 300)
- else
- Result := FALSE;
+ Result := Assigned(FLastResponse)
+ and ((FLastResponse.StatusCode >= 200) and (FLastResponse.StatusCode < 300));
end;
procedure TMARSNetClient.Post(const AURL: string; AContent, AResponse: TStream;
@@ -284,18 +284,16 @@ procedure TMARSNetClient.Put(const AURL: string; AContent, AResponse: TStream;
function TMARSNetClient.ResponseStatusCode: Integer;
begin
- if assigned(FLastResponse) then
- Result := FLastResponse.StatusCode
- else
- Result := -1;
+ Result := -1;
+ if Assigned(FLastResponse) then
+ Result := FLastResponse.StatusCode;
end;
function TMARSNetClient.ResponseText: string;
begin
- if assigned(FLastResponse) then
- Result := FLastResponse.StatusText
- else
- Result := '';
+ Result := '';
+ if Assigned(FLastResponse) then
+ Result := FLastResponse.StatusText;
end;
procedure TMARSNetClient.SetConnectTimeout(const Value: Integer);
@@ -345,6 +343,24 @@ procedure TMARSNetClient.Post(const AURL: string;
end;
end;
+procedure TMARSNetClient.Post(const AURL: string; const AFormUrlEncoded: TMARSParameters; const AResponse: TStream;
+ const AAuthToken, AAccept, AContentType: string);
+var
+ LFormUrlEncoded: TStrings;
+begin
+ inherited;
+
+ FHttpClient.Accept := AAccept;
+ FHttpClient.ContentType := AContentType;
+ LFormUrlEncoded := AFormUrlEncoded.AsStrings;
+ try
+ FLastResponse := FHttpClient.Post(AURL, LFormUrlEncoded, AResponse);
+ CheckLastCmdSuccess;
+ finally
+ LFormUrlEncoded.Free;
+ end;
+end;
+
procedure TMARSNetClient.Put(const AURL: string;
const AFormData: System.TArray; const AResponse: TStream;
const AAuthToken, AAccept: string; const AContentType: string);
@@ -368,5 +384,4 @@ procedure TMARSNetClient.Put(const AURL: string;
end;
end;
-
-end.
+end.
\ No newline at end of file
diff --git a/Source/MARS.Client.Client.pas b/Source/MARS.Client.Client.pas
index 9a9b2266..648fe2a8 100755
--- a/Source/MARS.Client.Client.pas
+++ b/Source/MARS.Client.Client.pas
@@ -15,6 +15,7 @@ interface
, MARS.Core.Utils
, MARS.Core.MediaType
, MARS.Client.Utils
+, MARS.Utils.Parameters
;
type
@@ -91,11 +92,17 @@ TMARSCustomClient = class(TComponent)
procedure Post(const AURL: string; const AFormData: TArray;
const AResponse: TStream;
const AAuthToken: string; const AAccept: string; const AContentType: string); overload; virtual;
+ procedure Post(const AURL: string; const AFormUrlEncoded: TMARSParameters;
+ const AResponse: TStream;
+ const AAuthToken: string; const AAccept: string; const AContentType: string); overload; virtual;
procedure Put(const AURL: string; AContent, AResponse: TStream;
const AAuthToken: string; const AAccept: string; const AContentType: string); overload; virtual;
procedure Put(const AURL: string; const AFormData: TArray;
const AResponse: TStream;
const AAuthToken: string; const AAccept: string; const AContentType: string); overload; virtual;
+ procedure Put(const AURL: string; const AFormUrlEncoded: TMARSParameters;
+ const AResponse: TStream;
+ const AAuthToken: string; const AAccept: string; const AContentType: string); overload; virtual;
function LastCmdSuccess: Boolean; virtual;
function ResponseStatusCode: Integer; virtual;
@@ -612,6 +619,13 @@ procedure TMARSCustomClient.Post(const AURL: string;
FireBeforeExecute(AURL, Self);
end;
+procedure TMARSCustomClient.Post(const AURL: string; const AFormUrlEncoded: TMARSParameters; const AResponse: TStream;
+ const AAuthToken, AAccept, AContentType: string);
+begin
+ FAuthToken := AAuthToken;
+ BeforeExecute;
+end;
+
class function TMARSCustomClient.PostJSON(const AEngineURL, AAppName,
AResourceName: string; const APathParams: TArray; const AQueryParams: TStrings;
const AContent: TJSONValue; const ACompletionHandler: TProc; const AToken: string
@@ -794,6 +808,12 @@ class function TMARSCustomClient.PostStream(const AEngineURL, AAppName,
end;
end;
+procedure TMARSCustomClient.Put(const AURL: string; const AFormUrlEncoded: TMARSParameters; const AResponse: TStream;
+ const AAuthToken, AAccept, AContentType: string);
+begin
+ FAuthToken := AAuthToken;
+ BeforeExecute;
+end;
procedure TMARSCustomClient.Put(const AURL: string;
const AFormData: TArray; const AResponse: TStream;
diff --git a/Source/MARS.Client.Register.pas b/Source/MARS.Client.Register.pas
index d77c2cd3..64096a1b 100644
--- a/Source/MARS.Client.Register.pas
+++ b/Source/MARS.Client.Register.pas
@@ -11,7 +11,8 @@ implementation
MARS.Client.Client.Indy, MARS.Client.Application,
MARS.Client.Resource, MARS.Client.Resource.FormData, MARS.Client.Resource.JSON,
MARS.Client.Resource.Stream, MARS.Client.Token, MARS.Client.Client.Net,
- MARS.Client.CustomResource, MARS.Client.CustomResource.Editor;
+ MARS.Client.CustomResource, MARS.Client.CustomResource.Editor,
+ MARS.Client.Resource.FormUrlEncoded;
procedure Register;
begin
@@ -19,6 +20,7 @@ procedure Register;
TMARSClientApplication,
TMARSClientResource,
TMARSClientResourceFormData,
+ TMARSClientResourceFormUrlEncoded,
TMARSClientResourceJSON,
TMARSClientResourceStream,
TMARSClientToken,
diff --git a/Source/MARS.Client.Resource.FormUrlEncoded.pas b/Source/MARS.Client.Resource.FormUrlEncoded.pas
new file mode 100644
index 00000000..b25c9681
--- /dev/null
+++ b/Source/MARS.Client.Resource.FormUrlEncoded.pas
@@ -0,0 +1,248 @@
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+
+unit MARS.Client.Resource.FormUrlEncoded;
+
+{$I MARS.inc}
+
+interface
+
+uses
+ SysUtils, Classes, Generics.Collections
+
+ , MARS.Client.Resource, MARS.Client.CustomResource, MARS.Client.Client
+ , MARS.Client.Utils, MARS.Core.Utils, MARS.Utils.Parameters, MARS.Core.JSON
+;
+
+type
+ [ComponentPlatformsAttribute(pidAllPlatforms)]
+ TMARSClientResourceFormUrlEncoded = class(TMARSClientResource)
+ private
+ FFormUrlEncoded: TMARSParameters;
+ FResponse: TMemoryStream;
+ protected
+ procedure AssignTo(Dest: TPersistent); override;
+ procedure AfterPOST(const AContent: TStream); override;
+ procedure AfterPUT(const AContent: TStream); override;
+ function GetResponseAsString: string; override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+
+ procedure POST(
+ const ABeforeExecute: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AAfterExecute: TMARSClientResponseProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AOnException: TMARSClientExecptionProc{$ifdef DelphiXE2_UP} = nil{$endif}); overload; override;
+ procedure POST(
+ const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AAfterExecute: TMARSClientResponseProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AOnException: TMARSClientExecptionProc{$ifdef DelphiXE2_UP} = nil{$endif}); overload; virtual;
+
+ procedure POSTAsync(
+ const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const ACompletionHandler: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AOnException: TMARSClientExecptionProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const ASynchronize: Boolean = True); overload; virtual;
+
+ procedure PUT(
+ const ABeforeExecute: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AAfterExecute: TMARSClientResponseProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AOnException: TMARSClientExecptionProc{$ifdef DelphiXE2_UP} = nil{$endif}); overload; override;
+ procedure PUT(
+ const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AAfterExecute: TMARSClientResponseProc{$ifdef DelphiXE2_UP} = nil{$endif};
+ const AOnException: TMARSClientExecptionProc{$ifdef DelphiXE2_UP} = nil{$endif}); overload; virtual;
+
+ function ResponseAsJSON: TJSONValue;
+ function ResponseAs: T;
+ function ResponseAsArray: TArray;
+ published
+ property FormUrlEncoded: TMARSParameters read FFormUrlEncoded write FFormUrlEncoded;
+ property Response: TMemoryStream read FResponse;
+ property ResponseAsString;
+ end;
+
+const
+ FORM_URL_ENCODED_SEPARATOR = '-';
+
+implementation
+
+uses
+ MARS.Core.MediaType
+;
+
+{ TMARSClientResourceFormUrlEncoded }
+
+procedure TMARSClientResourceFormUrlEncoded.AfterPOST(const AContent: TStream);
+begin
+ inherited;
+ AContent.Position := 0;
+ FResponse.Size := 0; // clear
+ FResponse.CopyFrom(AContent, 0);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.AfterPUT(const AContent: TStream);
+begin
+ inherited;
+ AContent.Position := 0;
+ FResponse.Size := 0; // clear
+ FResponse.CopyFrom(AContent, 0);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.AssignTo(Dest: TPersistent);
+begin
+ inherited;
+ if Dest is TMARSClientResourceFormUrlEncoded then
+ TMARSClientResourceFormUrlEncoded(Dest).FFormUrlEncoded := FFormUrlEncoded;
+end;
+
+constructor TMARSClientResourceFormUrlEncoded.Create(AOwner: TComponent);
+begin
+ inherited;
+ FFormUrlEncoded := TMARSParameters.Create('keys');
+ FResponse := TMemoryStream.Create;
+ SpecificContentType := TMediaType.APPLICATION_FORM_URLENCODED_TYPE;
+end;
+
+destructor TMARSClientResourceFormUrlEncoded.Destroy;
+begin
+ FResponse.Free;
+ FFormUrlEncoded.Free;
+ inherited;
+end;
+
+function TMARSClientResourceFormUrlEncoded.GetResponseAsString: string;
+begin
+ Result := StreamToString(FResponse);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.POST(const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc; const AAfterExecute: TMARSClientResponseProc;
+ const AOnException: TMARSClientExecptionProc);
+begin
+ FFormUrlEncoded := AFormUrlEncoded;
+ POST(ABeforeExecute, AAfterExecute, AOnException);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.POSTAsync(const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc; const ACompletionHandler: TProc;
+ const AOnException: TMARSClientExecptionProc; const ASynchronize: Boolean);
+begin
+ FFormUrlEncoded := AFormUrlEncoded;
+ inherited POSTAsync(ABeforeExecute, ACompletionHandler, AOnException, ASynchronize);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.PUT(const AFormUrlEncoded: TMARSParameters;
+ const ABeforeExecute: TProc; const AAfterExecute: TMARSClientResponseProc;
+ const AOnException: TMARSClientExecptionProc);
+begin
+ FFormUrlEncoded := AFormUrlEncoded;
+ PUT(ABeforeExecute, AAfterExecute, AOnException);
+end;
+
+function TMARSClientResourceFormUrlEncoded.ResponseAs: T;
+var
+ LJSON: TJSONValue;
+begin
+ LJSON := ResponseAsJSON;
+ try
+ Result := (LJSON as TJSONObject).ToRecord;
+ finally
+ LJSON.Free;
+ end;
+end;
+
+function TMARSClientResourceFormUrlEncoded.ResponseAsArray: TArray;
+var
+ LJSON: TJSONValue;
+begin
+ LJSON := ResponseAsJSON;
+ try
+ Result := (LJSON as TJSONArray).ToArrayOfRecord;
+ finally
+ LJSON.Free;
+ end;
+end;
+
+function TMARSClientResourceFormUrlEncoded.ResponseAsJSON: TJSONValue;
+begin
+ Result := StreamToJSONValue(Response);
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.PUT(const ABeforeExecute: TProc;
+ const AAfterExecute: TMARSClientResponseProc; const AOnException: TMARSClientExecptionProc);
+var
+ LResponseStream: TMemoryStream;
+begin
+ // inherited (!)
+
+ try
+ BeforePUT(nil);
+
+ if Assigned(ABeforeExecute) then
+ ABeforeExecute(nil);
+
+ LResponseStream := TMemoryStream.Create;
+ try
+ Client.Put(URL, FFormUrlEncoded, LResponseStream, AuthToken, Accept, ContentType);
+
+ AfterPUT(LResponseStream);
+
+ if Assigned(AAfterExecute) then
+ AAfterExecute(LResponseStream);
+ finally
+ LResponseStream.Free;
+ end;
+ except
+ on E:Exception do
+ begin
+ if Assigned(AOnException) then
+ AOnException(E)
+ else
+ DoError(E, TMARSHttpVerb.Put, AAfterExecute);
+ end;
+ end;
+end;
+
+procedure TMARSClientResourceFormUrlEncoded.POST(const ABeforeExecute: TProc;
+ const AAfterExecute: TMARSClientResponseProc; const AOnException: TMARSClientExecptionProc);
+var
+ LResponseStream: TMemoryStream;
+begin
+ // inherited (!)
+
+ try
+ BeforePOST(nil);
+
+ if Assigned(ABeforeExecute) then
+ ABeforeExecute(nil);
+
+ LResponseStream := TMemoryStream.Create;
+ try
+ Client.Post(URL, FFormUrlEncoded, LResponseStream, AuthToken, Accept, ContentType);
+
+ AfterPOST(LResponseStream);
+
+ if Assigned(AAfterExecute) then
+ AAfterExecute(LResponseStream);
+ finally
+ LResponseStream.Free;
+ end;
+ except
+ on E:Exception do
+ begin
+ if Assigned(AOnException) then
+ AOnException(E)
+ else
+ DoError(E, TMARSHttpVerb.Post, AAfterExecute);
+ end;
+ end;
+end;
+
+end.
diff --git a/Source/MARS.Core.Activation.InjectionService.pas b/Source/MARS.Core.Activation.InjectionService.pas
index 5b4142a2..99fb9004 100644
--- a/Source/MARS.Core.Activation.InjectionService.pas
+++ b/Source/MARS.Core.Activation.InjectionService.pas
@@ -10,11 +10,9 @@
interface
uses
- Classes, SysUtils, Rtti
- , MARS.Core.Injection
- , MARS.Core.Injection.Interfaces
- , MARS.Core.Injection.Types
- , MARS.Core.Activation.Interfaces
+ Classes, SysUtils, System.Rtti, System.TypInfo
+, MARS.Core.Injection, MARS.Core.Injection.Interfaces, MARS.Core.Injection.Types
+, MARS.Core.Activation.Interfaces
;
type
@@ -27,13 +25,9 @@ TMARSActivationInjectionService = class(TInterfacedObject, IMARSInjectionServi
implementation
uses
- MARS.Rtti.Utils
- , MARS.Core.Token, MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Attributes
-{$ifdef DelphiXE6_UP}
- , Web.HttpApp
-{$else}
- , HttpApp
-{$endif}
+ MARS.Rtti.Utils
+, MARS.Core.Token, MARS.Core.URL, MARS.Core.Engine, MARS.Core.Application, MARS.Core.Attributes
+, MARS.Core.RequestAndResponse.Interfaces
;
{ TMARSActivationInjectionService }
@@ -63,10 +57,10 @@ procedure TMARSActivationInjectionService.GetValue(const ADestination: TRttiObje
end
) then
AValue := LValue
- else if (LType.IsObjectOfType(TWebRequest)) then
- AValue := TInjectionValue.Create(AActivation.Request, True)
- else if (LType.IsObjectOfType(TWebResponse)) then
- AValue := TInjectionValue.Create(AActivation.Response, True)
+ else if (LType is TRttiInterfaceType) and (LType.Handle = TypeInfo(IMARSRequest)) then
+ AValue := TInjectionValue.Create(TValue.From(AActivation.Request), True)
+ else if (LType is TRttiInterfaceType) and (LType.Handle = TypeInfo(IMARSResponse)) then
+ AValue := TInjectionValue.Create(TValue.From(AActivation.Response), True)
else if (LType.IsObjectOfType(TMARSURL)) then
AValue := TInjectionValue.Create(AActivation.URL, True)
else if (LType.IsObjectOfType(TMARSEngine)) then
@@ -96,8 +90,8 @@ procedure RegisterServices;
Result :=
ADestination.HasAttribute
or ADestination.HasAttribute
- or LType.IsObjectOfType(TWebRequest)
- or LType.IsObjectOfType(TWebResponse)
+ or (LType.Handle = TypeInfo(IMARSRequest))
+ or (LType.Handle = TypeInfo(IMARSResponse))
or LType.IsObjectOfType(TMARSURL)
or LType.IsObjectOfType(TMARSEngine)
or LType.IsObjectOfType(TMARSApplication)
diff --git a/Source/MARS.Core.Activation.Interfaces.pas b/Source/MARS.Core.Activation.Interfaces.pas
index 3f23fb19..0ea46b42 100644
--- a/Source/MARS.Core.Activation.Interfaces.pas
+++ b/Source/MARS.Core.Activation.Interfaces.pas
@@ -11,18 +11,11 @@ interface
uses
SysUtils, Classes, Generics.Collections, Rtti, Diagnostics
- , HTTPApp
-
- , MARS.Core.URL
- , MARS.Core.Application
- , MARS.Core.Engine
- , MARS.Core.Token
- , MARS.Core.MediaType
- , MARS.Core.Injection.Types
- ;
+, MARS.Core.URL, MARS.Core.Application, MARS.Core.Engine, MARS.Core.Token
+, MARS.Core.MediaType, MARS.Core.Injection.Types, MARS.Core.RequestAndResponse.Interfaces
+;
type
-
IMARSActivation = interface
procedure AddToContext(AValue: TValue);
function HasToken: Boolean;
@@ -40,11 +33,11 @@ interface
function GetMethodArguments: TArray;
function GetMethodAttributes: TArray;
function GetMethodResult: TValue;
- function GetRequest: TWebRequest;
+ function GetRequest: IMARSRequest;
function GetResource: TRttiType;
function GetResourceAttributes: TArray;
function GetResourceInstance: TObject;
- function GetResponse: TWebResponse;
+ function GetResponse: IMARSResponse;
function GetURL: TMARSURL;
function GetURLPrototype: TMARSURL;
function GetToken: TMARSToken;
@@ -60,11 +53,11 @@ interface
property MethodArguments: TArray read GetMethodArguments;
property MethodAttributes: TArray read GetMethodAttributes;
property MethodResult: TValue read GetMethodResult;
- property Request: TWebRequest read GetRequest;
+ property Request: IMARSRequest read GetRequest;
property Resource: TRttiType read GetResource;
property ResourceAttributes: TArray read GetResourceAttributes;
property ResourceInstance: TObject read GetResourceInstance;
- property Response: TWebResponse read GetResponse;
+ property Response: IMARSResponse read GetResponse;
property URL: TMARSURL read GetURL;
property URLPrototype: TMARSURL read GetURLPrototype;
property Token: TMARSToken read GetToken;
diff --git a/Source/MARS.Core.Activation.pas b/Source/MARS.Core.Activation.pas
index 2e42fede..762a66bd 100644
--- a/Source/MARS.Core.Activation.pas
+++ b/Source/MARS.Core.Activation.pas
@@ -10,12 +10,12 @@
interface
uses
- SysUtils, Classes, Generics.Collections, Rtti, Diagnostics, HTTPApp
+ SysUtils, Classes, Generics.Collections, Rtti, Diagnostics
, MARS.Core.Classes, MARS.Core.URL, MARS.Core.MediaType
, MARS.Core.Application, MARS.Core.Engine, MARS.Core.Token
, MARS.Core.Registry.Utils, MARS.Core.Injection.Types, MARS.Core.Activation.Interfaces
-, MARS.Core.MessageBodyWriter
+, MARS.Core.MessageBodyWriter, MARS.Core.RequestAndResponse.Interfaces
;
type
@@ -23,7 +23,7 @@ TMARSActivation = class;
TMARSActivationFactoryFunc = reference to function (const AEngine: TMARSEngine;
const AApplication: TMARSApplication;
- const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const ARequest: IMARSRequest; const AResponse: IMARSResponse;
const AURL: TMARSURL
): IMARSActivation;
@@ -43,8 +43,8 @@ TMARSAuthorizationInfo = record
TMARSActivation = class(TInterfacedObject, IMARSActivation)
private
- FRequest: TWebRequest;
- FResponse: TWebResponse;
+ FRequest: IMARSRequest;
+ FResponse: IMARSResponse;
class var FBeforeInvokeProcs: TArray;
class var FAfterInvokeProcs: TArray;
class var FInvokeErrorProcs: TArray;
@@ -97,7 +97,7 @@ TMARSActivation = class(TInterfacedObject, IMARSActivation)
procedure CheckAuthorization; virtual;
public
constructor Create(const AEngine: TMARSEngine; const AApplication: TMARSApplication;
- const ARequest: TWebRequest; const AResponse: TWebResponse; const AURL: TMARSURL); virtual;
+ const ARequest: IMARSRequest; const AResponse: IMARSResponse; const AURL: TMARSURL); virtual;
destructor Destroy; override;
// --- IMARSActivation implementation --------------
@@ -116,11 +116,11 @@ TMARSActivation = class(TInterfacedObject, IMARSActivation)
function GetMethodArguments: TArray; inline;
function GetMethodAttributes: TArray; inline;
function GetMethodResult: TValue; inline;
- function GetRequest: TWebRequest; inline;
+ function GetRequest: IMARSRequest; inline;
function GetResource: TRttiType; inline;
function GetResourceAttributes: TArray; inline;
function GetResourceInstance: TObject; inline;
- function GetResponse: TWebResponse; inline;
+ function GetResponse: IMARSResponse; inline;
function GetURL: TMARSURL; inline;
function GetURLPrototype: TMARSURL; inline;
function GetToken: TMARSToken; inline;
@@ -131,10 +131,10 @@ TMARSActivation = class(TInterfacedObject, IMARSActivation)
property InvocationTime: TStopwatch read FInvocationTime;
property Method: TRttiMethod read FMethod;
property MethodArguments: TArray read FMethodArguments;
- property Request: TWebRequest read FRequest;
+ property Request: IMARSRequest read FRequest;
property Resource: TRttiType read FResource;
property ResourceInstance: TObject read FResourceInstance;
- property Response: TWebResponse read FResponse;
+ property Response: IMARSResponse read FResponse;
property URL: TMARSURL read FURL;
property URLPrototype: TMARSURL read FURLPrototype;
property Token: TMARSToken read GetToken;
@@ -152,7 +152,7 @@ TMARSActivation = class(TInterfacedObject, IMARSActivation)
class var CreateActivationFunc: TMARSActivationFactoryFunc;
class function CreateActivation(const AEngine: TMARSEngine;
const AApplication: TMARSApplication;
- const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const ARequest: IMARSRequest; const AResponse: IMARSResponse;
const AURL: TMARSURL): IMARSActivation;
end;
@@ -208,7 +208,7 @@ function TMARSActivation.GetMethodReturnType: TRttiType;
Result := FMethodReturnType;
end;
-function TMARSActivation.GetRequest: TWebRequest;
+function TMARSActivation.GetRequest: IMARSRequest;
begin
Result := FRequest;
end;
@@ -228,7 +228,7 @@ function TMARSActivation.GetResourceInstance: TObject;
Result := FResourceInstance;
end;
-function TMARSActivation.GetResponse: TWebResponse;
+function TMARSActivation.GetResponse: IMARSResponse;
begin
Result := FResponse;
end;
@@ -563,7 +563,7 @@ procedure TMARSActivation.SetCustomHeaders;
LCustomAtributeProcessor :=
procedure (ACustomHeader: CustomHeaderAttribute)
begin
- Response.CustomHeaders.Values[ACustomHeader.HeaderName] := ACustomHeader.Value;
+ Response.SetHeader(ACustomHeader.HeaderName, ACustomHeader.Value);
end;
TRttiHelper.ForEachAttribute(FResourceAttributes, LCustomAtributeProcessor);
TRttiHelper.ForEachAttribute(FMethodAttributes, LCustomAtributeProcessor);
@@ -606,7 +606,7 @@ procedure TMARSActivation.Invoke;
begin
try
try
- Request.ReadTotalContent; // workaround for https://quality.embarcadero.com/browse/RSP-14674
+ Request.CheckWorkaroundForISAPI;
// setup phase
FSetupTime := TStopWatch.StartNew;
@@ -741,7 +741,7 @@ function TMARSActivation.GetInvocationTime: TStopwatch;
constructor TMARSActivation.Create(const AEngine: TMARSEngine;
const AApplication: TMARSApplication;
- const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const ARequest: IMARSRequest; const AResponse: IMARSResponse;
const AURL: TMARSURL);
begin
inherited Create;
@@ -775,8 +775,8 @@ constructor TMARSActivation.Create(const AEngine: TMARSEngine;
end;
class function TMARSActivation.CreateActivation(const AEngine: TMARSEngine;
- const AApplication: TMARSApplication; const ARequest: TWebRequest;
- const AResponse: TWebResponse; const AURL: TMARSURL): IMARSActivation;
+ const AApplication: TMARSApplication; const ARequest: IMARSRequest;
+ const AResponse: IMARSResponse; const AURL: TMARSURL): IMARSActivation;
begin
if Assigned(CreateActivationFunc) then
Result := CreateActivationFunc(AEngine, AApplication, ARequest, AResponse, AURL)
diff --git a/Source/MARS.Core.Attributes.pas b/Source/MARS.Core.Attributes.pas
index 69382af3..ab242a94 100644
--- a/Source/MARS.Core.Attributes.pas
+++ b/Source/MARS.Core.Attributes.pas
@@ -10,14 +10,11 @@
interface
uses
- Classes, SysUtils, RTTI, Generics.Collections
- , HttpApp, Web.ReqMulti
- , MARS.Core.Declarations
- , MARS.Core.Utils
- , MARS.Core.URL
- , MARS.Core.JSON
- , MARS.Core.Activation.Interfaces
- , MARS.Core.Exceptions
+ Classes, SysUtils, System.Rtti, System.TypInfo, Generics.Collections
+, Web.ReqMulti
+, MARS.Core.Declarations, MARS.Core.Utils, MARS.Core.URL, MARS.Core.JSON
+, MARS.Core.Activation.Interfaces, MARS.Core.RequestAndResponse.Interfaces
+, MARS.Core.Exceptions
;
type
@@ -36,48 +33,48 @@ HttpMethodAttribute = class(MARSAttribute)
protected
function GetHttpMethodName: string; virtual;
public
- function Matches(const ARequest: TWebRequest): Boolean; virtual;
+ function Matches(const ARequest: IMARSRequest): Boolean; virtual;
property HttpMethodName: string read GetHttpMethodName;
end;
- ANYAttribute = class(HttpMethodAttribute)
- public
- function Matches(const ARequest: TWebRequest): Boolean; override;
- end;
+// ANYAttribute = class(HttpMethodAttribute)
+// public
+// function Matches(const ARequest: IMARSRequest): Boolean; override;
+// end;
GETAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
POSTAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
PUTAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
DELETEAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
PATCHAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
HEADAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
OPTIONSAttribute = class(HttpMethodAttribute)
public
- function Matches(const ARequest: TWebRequest): Boolean; override;
+ function Matches(const ARequest: IMARSRequest): Boolean; override;
end;
ConsumesAttribute = class(MARSAttribute)
@@ -466,59 +463,51 @@ function HttpMethodAttribute.GetHttpMethodName: string;
{$endif}
end;
-function HttpMethodAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function HttpMethodAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
Result := False;
end;
{ GETAttribute }
-function GETAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function GETAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
- Result := ARequest.MethodType = TMethodType.mtGet;
+ Result := SameText(ARequest.Method, 'GET');
end;
{ POSTAttribute }
-function POSTAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function POSTAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
- Result := ARequest.MethodType = TMethodType.mtPost;
+ Result := SameText(ARequest.Method, 'POST');
end;
{ PUTAttribute }
-function PUTAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function PUTAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
- Result := ARequest.MethodType = TMethodType.mtPut;
+ Result := SameText(ARequest.Method, 'PUT');
end;
{ DELETEAttribute }
-function DELETEAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function DELETEAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
-{$ifdef DelphiXE7_UP}
- Result := ARequest.MethodType = TMethodType.mtDelete;
-{$else}
- Result := SameText(string(ARequest.Method), 'Delete');
-{$endif}
+ Result := SameText(ARequest.Method, 'DELETE');
end;
{ PATCHAttribute }
-function PATCHAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function PATCHAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
-{$ifdef DelphiXE7_UP}
- Result := ARequest.MethodType = TMethodType.mtPatch;
-{$else}
- Result := SameText(string(ARequest.Method), 'Patch');
-{$endif}
+ Result := SameText(ARequest.Method, 'PATCH');
end;
{ HEADAttribute }
-function HEADAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function HEADAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
- Result := ARequest.MethodType = TMethodType.mtHead;
+ Result := SameText(ARequest.Method, 'HEAD');
end;
{ CustomHeaderAttribute }
@@ -597,7 +586,7 @@ function QueryParamAttribute.GetValue(const ADestination: TRttiObject;
LReader: IMessageBodyReader;
LIndex: Integer;
begin
- LIndex := AActivation.Request.QueryFields.IndexOfName(GetActualName(ADestination));
+ LIndex := AActivation.Request.GetQueryParamIndex(GetActualName(ADestination));
if (LIndex = -1) then
CheckRequiredAttribute(ADestination)
else
@@ -608,7 +597,7 @@ function QueryParamAttribute.GetValue(const ADestination: TRttiObject;
try
Result := LReader.ReadFrom(
{$ifdef Delphi10Berlin_UP} TEncoding.UTF8.GetBytes( {$endif}
- AActivation.Request.QueryFields.ValueFromIndex[LIndex]
+ AActivation.Request.GetQueryParamValue(LIndex)
{$ifdef Delphi10Berlin_UP} ) {$endif}
, ADestination, LMediaType, AActivation);
finally
@@ -617,7 +606,7 @@ function QueryParamAttribute.GetValue(const ADestination: TRttiObject;
else // 2 - fallback (raw)
begin
Result := StringToTValue(
- AActivation.Request.QueryFields.ValueFromIndex[LIndex]
+ AActivation.Request.GetQueryParamValue(LIndex)
, ADestination.GetRttiType
);
end;
@@ -636,23 +625,12 @@ function FormParamAttribute.GetValue(const ADestination: TRttiObject;
var
LMediaType: TMediaType;
LReader: IMessageBodyReader;
- LParamIndex: Integer;
- LFileIndex: Integer;
- LIndex: Integer;
- LFile: TAbstractWebRequestFile;
+ LParamIndex, LFileIndex: Integer;
+ LActualName: string;
begin
- LParamIndex := AActivation.Request.ContentFields.IndexOfName(GetActualName(ADestination));
- LFileIndex := -1;
- for LIndex := 0 to AActivation.Request.Files.Count-1 do
- begin
- LFile := AActivation.Request.Files[LIndex];
- if SameText(LFile.FieldName, GetActualName(ADestination)) then
- begin
- LFileIndex := LIndex;
- Break;
- end;
- end;
-
+ LActualName := GetActualName(ADestination);
+ LParamIndex := AActivation.Request.GetFormParamIndex(LActualName);
+ LFileIndex := AActivation.Request.GetFormFileParamIndex(LActualName);
if (LParamIndex = -1) and (LFileIndex = -1) then
CheckRequiredAttribute(ADestination)
else
@@ -661,17 +639,23 @@ function FormParamAttribute.GetValue(const ADestination: TRttiObject;
TMARSMessageBodyReaderRegistry.Instance.FindReader(ADestination, LReader, LMediaType);
if Assigned(LReader) then
try
- Result := LReader.ReadFrom(
- {$ifdef Delphi10Berlin_UP} TEncoding.UTF8.GetBytes( {$endif}
- AActivation.Request.ContentFields.ValueFromIndex[LParamIndex]
- {$ifdef Delphi10Berlin_UP} ) {$endif}
- , ADestination, LMediaType, AActivation);
+ if LParamIndex <> -1 then
+ Result := LReader.ReadFrom(
+ {$ifdef Delphi10Berlin_UP} TEncoding.UTF8.GetBytes( {$endif}
+ AActivation.Request.GetFormParamValue(LParamIndex)
+ {$ifdef Delphi10Berlin_UP} ) {$endif}
+ , ADestination, LMediaType, AActivation)
+ else if LFileIndex <> -1 then
+ Result := LReader.ReadFrom(
+ {$ifdef Delphi10Berlin_UP} TEncoding.UTF8.GetBytes( {$endif}
+ ''
+ {$ifdef Delphi10Berlin_UP} ) {$endif}
+ , ADestination, LMediaType, AActivation);
finally
FreeAndNil(LMediaType);
end
else // 2 - fallback (raw)
- Result := StringToTValue(AActivation.Request.ContentFields.ValueFromIndex[LParamIndex]
- , ADestination.GetRttiType);
+ Result := StringToTValue(AActivation.Request.GetFormParamValue(LParamIndex), ADestination.GetRttiType);
end;
end;
@@ -692,7 +676,7 @@ function HeaderParamAttribute.GetValue(const ADestination: TRttiObject;
LValue: string;
begin
Result := TValue.Empty;
- LValue := AActivation.Request.GetFieldByName(TheName);
+ LValue := AActivation.Request.GetHeaderParamValue(TheName);
if (LValue = '') then
CheckRequiredAttribute(TheDestination);
@@ -756,11 +740,11 @@ function CookieParamAttribute.GetValue(const ADestination: TRttiObject;
var
LIndex: Integer;
begin
- LIndex := AActivation.Request.CookieFields.IndexOfName(GetActualName(ADestination));
+ LIndex := AActivation.Request.GetCookieParamIndex(GetActualName(ADestination));
if LIndex = -1 then
CheckRequiredAttribute(ADestination);
Result := StringToTValue(
- AActivation.Request.CookieFields.ValueFromIndex[LIndex]
+ AActivation.Request.GetCookieParamValue(LIndex)
, ADestination.GetRttiType
);
end;
@@ -821,16 +805,16 @@ function AuthorizationAttribute.ToString: string;
Result := Result.Substring(0, Result.Length - 'Attribute'.Length);
end;
-{ ANYAttribute }
-
-function ANYAttribute.Matches(const ARequest: TWebRequest): Boolean;
-begin
- Result := ARequest.MethodType = TMethodType.mtAny;
-end;
+//{ ANYAttribute }
+//
+//function ANYAttribute.Matches(const ARequest: IMARSRequest): Boolean;
+//begin
+// Result := SameText(ARequest.Method, 'ANY');
+//end;
{ OPTIONSAttribute }
-function OPTIONSAttribute.Matches(const ARequest: TWebRequest): Boolean;
+function OPTIONSAttribute.Matches(const ARequest: IMARSRequest): Boolean;
begin
Result := SameText(ARequest.Method, 'OPTIONS');
end;
@@ -859,7 +843,7 @@ function FormParamsAttribute.GetValue(const ADestination: TRttiObject;
LMediaType: TMediaType;
LReader: IMessageBodyReader;
begin
- if AActivation.Request.ContentFields.Count = 0 then
+ if AActivation.Request.GetFormParamCount = 0 then
CheckRequiredAttribute(ADestination)
else
begin
@@ -874,7 +858,7 @@ function FormParamsAttribute.GetValue(const ADestination: TRttiObject;
FreeAndNil(LMediaType);
end
else // 2 - fallback (raw)
- Result := StringToTValue(AActivation.Request.ContentFields.Text, ADestination.GetRttiType);
+ Result := StringToTValue(AActivation.Request.GetFormParams, ADestination.GetRttiType);
end;
end;
diff --git a/Source/MARS.Core.Engine.pas b/Source/MARS.Core.Engine.pas
index 17be5cc6..89c5c330 100644
--- a/Source/MARS.Core.Engine.pas
+++ b/Source/MARS.Core.Engine.pas
@@ -10,15 +10,11 @@
interface
uses
- SysUtils, HTTPApp, Classes, Generics.Collections
+ SysUtils, Classes, Generics.Collections
, SyncObjs
- , MARS.Core.Classes
- , MARS.Core.Registry
- , MARS.Core.Application
- , MARS.Core.URL
- , MARS.Core.Exceptions
- , MARS.Utils.Parameters
+ , MARS.Core.Classes, MARS.Core.Registry, MARS.Core.Application, MARS.Core.URL
+ , MARS.Core.Exceptions, MARS.Utils.Parameters, MARS.Core.RequestAndResponse.Interfaces
;
{$M+}
@@ -31,10 +27,10 @@ EMARSEngineException = class(EMARSHttpException);
TMARSEngine = class;
TBeforeHandleRequestProc = reference to function(const AEngine: TMARSEngine;
- const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const AURL: TMARSURL; const ARequest: IMARSRequest; const AResponse: IMARSResponse;
var Handled: Boolean): Boolean;
TAfterHandleRequestProc = reference to procedure(const AEngine: TMARSEngine;
- const AURL: TMARSURL; const ARequest: TWebRequest; const AResponse: TWebResponse;
+ const AURL: TMARSURL; const ARequest: IMARSRequest; const AResponse: IMARSResponse;
var Handled: Boolean);
TMARSEngine = class
@@ -52,12 +48,12 @@ TMARSEngine = class
procedure SetBasePath(const Value: string); virtual;
procedure SetPort(const Value: Integer); virtual;
procedure SetThreadPoolSize(const Value: Integer); virtual;
- procedure PatchCORS(const ARequest: TWebRequest; const AResponse: TWebResponse); virtual;
+ procedure PatchCORS(const ARequest: IMARSRequest; const AResponse: IMARSResponse); virtual;
public
constructor Create(const AName: string = DEFAULT_ENGINE_NAME); virtual;
destructor Destroy; override;
- function HandleRequest(ARequest: TWebRequest; AResponse: TWebResponse): Boolean; virtual;
+ function HandleRequest(ARequest: IMARSRequest; AResponse: IMARSResponse): Boolean; virtual;
function AddApplication(const AName, ABasePath: string;
const AResources: array of string; const AParametersSliceName: string = ''): TMARSApplication; virtual;
@@ -190,7 +186,7 @@ procedure TMARSEngine.EnumerateApplications(
end;
end;
-function TMARSEngine.HandleRequest(ARequest: TWebRequest; AResponse: TWebResponse): Boolean;
+function TMARSEngine.HandleRequest(ARequest: IMARSRequest; AResponse: IMARSResponse): Boolean;
var
LApplication: TMARSApplication;
LURL: TMARSURL;
@@ -240,13 +236,12 @@ function TMARSEngine.HandleRequest(ARequest: TWebRequest; AResponse: TWebRespons
end;
end;
-procedure TMARSEngine.PatchCORS(const ARequest: TWebRequest;
- const AResponse: TWebResponse);
+procedure TMARSEngine.PatchCORS(const ARequest: IMARSRequest;
+ const AResponse: IMARSResponse);
procedure SetHeaderFromParameter(const AHeader, AParamName, ADefault: string);
begin
- AResponse.CustomHeaders.Values[AHeader] :=
- Parameters.ByName(AParamName, ADefault).AsString;
+ AResponse.SetHeader(AHeader, Parameters.ByName(AParamName, ADefault).AsString);
end;
begin
diff --git a/Source/MARS.Core.JSON.pas b/Source/MARS.Core.JSON.pas
index 7177ef7e..4bf1c5e9 100644
--- a/Source/MARS.Core.JSON.pas
+++ b/Source/MARS.Core.JSON.pas
@@ -1,1007 +1,1010 @@
-(*
- Copyright 2016, MARS-Curiosity library
-
- Home: https://github.com/andrea-magni/MARS
-*)
-unit MARS.Core.JSON;
-
-{$I MARS.inc}
-
-interface
-
-uses
-{$IFDEF Delphi10Rio_UP}
- Generics.Collections,
-{$ENDIF}
-{$ifdef DelphiXE6_UP}
- JSON
-{$else}
- DBXJSON
-{$endif}
- , SysUtils
-{$ifdef DelphiXE2_UP}
- , System.Rtti
-{$else}
- , Rtti
-{$endif}
- , TypInfo, REST.JSON
-;
-
-type
- TJSONAncestor = {$ifdef DelphiXE6_UP}JSON.TJSONAncestor{$else}DBXJSON.TJSONAncestor{$endif};
- TJSONPair = {$ifdef DelphiXE6_UP}JSON.TJSONPair{$else}DBXJSON.TJSONPair{$endif};
- TJSONValue = {$ifdef DelphiXE6_UP}JSON.TJSONValue{$else}DBXJSON.TJSONValue{$endif};
- TJSONTrue = {$ifdef DelphiXE6_UP}JSON.TJSONTrue{$else}DBXJSON.TJSONTrue{$endif};
- TJSONString = {$ifdef DelphiXE6_UP}JSON.TJSONString{$else}DBXJSON.TJSONString{$endif};
- TJSONNumber = {$ifdef DelphiXE6_UP}JSON.TJSONNumber{$else}DBXJSON.TJSONNumber{$endif};
- TJSONObject = {$ifdef DelphiXE6_UP}JSON.TJSONObject{$else}DBXJSON.TJSONObject{$endif};
- TJSONNull = {$ifdef DelphiXE6_UP}JSON.TJSONNull{$else}DBXJSON.TJSONNull{$endif};
- TJSONFalse = {$ifdef DelphiXE6_UP}JSON.TJSONFalse{$else}DBXJSON.TJSONFalse{$endif};
- TJSONArray = {$ifdef DelphiXE6_UP}JSON.TJSONArray{$else}DBXJSON.TJSONArray{$endif};
-
- TJSONValueHelper = class helper for TJSONValue
- public
-{$ifndef DelphiXE7_UP}
- function TryGetValue(const APath: string; out AValue: T): Boolean; overload;
- function ToJSON: string;
-{$endif}
- end;
-
- JSONNameAttribute = class(TCustomAttribute)
- private
- FName: string;
- public
- constructor Create(const AName: string);
- property Name: string read FName;
- end;
-
- TToRecordFilterProc = reference to procedure (const AField: TRttiField;
- const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean);
-
- TToJSONFilterProc = reference to procedure (const AField: TRttiField;
- const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean);
-
- TJSONRawString = type string;
-
-{$ifndef DelphiXE6_UP}
- TJSONArrayEnumerator = class
- private
- FIndex: Integer;
- FArray: TJSONArray;
- public
- constructor Create(const AArray: TJSONArray);
- function GetCurrent: TJSONValue; inline;
- function MoveNext: Boolean;
- property Current: TJSONValue read GetCurrent;
- end;
-{$endif}
-
- TJSONArrayHelper= class helper for TJSONArray
- private
- {$ifndef DelphiXE6_UP}
- function GetCount: Integer; inline;
- function GetValue(const Index: Integer): TJSONValue; inline;
- {$endif}
- public
- function ToArrayOfRecord(): TArray;
- procedure FromArrayOfRecord(const AArray: TArray;
- const AFilterProc: TToJSONFilterProc = nil);
- procedure FromArrayOfObject(const AArray: TArray;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]);
- function ForEach(const AFunc: TFunc): Integer;
-
- {$ifndef DelphiXE6_UP}
- function GetEnumerator: TJSONArrayEnumerator;
-
- property Count: Integer read GetCount;
- property Items[const Index: Integer]: TJSONValue read GetValue;
- {$endif}
-
- class function ArrayOfRecordToJSON(const AArray: TArray; const AFilterProc: TToJSONFilterProc = nil): TJSONArray;
- class function ArrayOfObjectToJSON(const AArray: TArray): TJSONArray;
- end;
-
- TJSONObjectHelper = class helper(TJSONValueHelper) for TJSONObject
- private
-{$ifndef DelphiXE6_UP}
- function GetCount: Integer; inline;
- function GetPair(const Index: Integer): TJSONPair; inline;
-{$endif}
- function GetExactPairName(const ACaseInsensitiveName: string): string;
- public
- function ReadStringValue(const AName: string; const ADefault: string = ''): string;
- function ReadIntegerValue(const AName: string; const ADefault: Integer = 0): Integer;
-{$ifdef DelphiXE6_UP}
- function ReadInt64Value(const AName: string; const ADefault: Int64 = 0): Int64;
-{$endif}
- function ReadDoubleValue(const AName: string; const ADefault: Double = 0.0): Double;
- function ReadBoolValue(const AName: string; const ADefault: Boolean = False): Boolean;
- function ReadDateTimeValue(const AName: string; const ADefault: TDateTime = 0.0;
- const AReturnUTC: Boolean = False): TDateTime;
- function ReadUnixTimeValue(const AName: string; const ADefault: TDateTime = 0.0): TDateTime;
- function ReadValue(const AName: string; const ADefault: TValue;
- const ADesiredType: TRttiType; const ANameCaseSensitive: Boolean = True): TValue; overload;
- function ReadValue(const AName: string; const ADesiredType: TRttiType;
- const ANameCaseSensitive: Boolean; out AValue: TValue): Boolean; overload;
- function ReadArrayValue(const AName: string): TJSONArray; overload; inline;
- function ReadArrayValue(const AName: string): TArray; overload; inline;
-
- procedure WriteStringValue(const AName: string; const AValue: string);
- procedure WriteIntegerValue(const AName: string; const AValue: Integer);
- procedure WriteInt64Value(const AName: string; const AValue: Int64);
- procedure WriteDoubleValue(const AName: string; const AValue: Double);
- procedure WriteBoolValue(const AName: string; const AValue: Boolean);
- procedure WriteDateTimeValue(const AName: string; const AValue: TDateTime;
- const AInputIsUTC: Boolean = False);
- procedure WriteUnixTimeValue(const AName: string; const AValue: TDateTime);
- procedure WriteTValue(const AName: string; const AValue: TValue);
- procedure WriteArrayValue(const AName: string; const AArray: TJSONArray); overload; inline;
- procedure WriteArrayValue(const AName: string; const AArray: TArray); overload; inline;
-
- procedure FromRecord(ARecord: T; const AFilterProc: TToJSONFilterProc = nil); overload;
- procedure FromRecord(const ARecord: TValue; const AFilterProc: TToJSONFilterProc = nil); overload;
- function ToRecord(const AFilterProc: TToRecordFilterProc = nil): T; overload;
- function ToRecord(const ARecordType: TRttiType;
- const AFilterProc: TToRecordFilterProc = nil): TValue; overload;
-
-{$ifndef DelphiXE6_UP}
- property Count: Integer read GetCount;
- property Pairs[const Index: Integer]: TJSONPair read GetPair;
-{$endif}
-
- class function ObjectToJSON(const AObject: TObject;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): TJSONObject; overload;
-
- class function JSONToObject(const AJSON: TJSONObject;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): T; overload;
-
- class function JSONToObject(const AClassType: TClass; const AJSON: TJSONObject;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): TObject; overload;
-
- class function RecordToJSON(ARecord: T;
- const AFilterProc: TToJSONFilterProc = nil): TJSONObject; overload;
- class function RecordToJSON(const ARecord: TValue;
- const AFilterProc: TToJSONFilterProc = nil): TJSONObject; overload;
-
- class function JSONToRecord(const AJSON: TJSONObject;
- const AFilterProc: TToRecordFilterProc = nil): T; overload;
- class function JSONToRecord(const ARecordType: TRttiType; const AJSON: TJSONObject;
- const AFilterProc: TToRecordFilterProc = nil): TValue; overload;
-
- class function TValueToJSONValue(const AValue: TValue): TJSONValue;
- class function TJSONValueToTValue(const AValue: TJSONValue; const ADesiredType: TRttiType): TValue;
- end;
-
- function StringArrayToJsonArray(const AStringArray: TArray): TJSONArray;
- function JsonArrayToStringArray(const AJSONArray: TJSONArray): TArray;
-
-implementation
-
-uses
- DateUtils, Variants, StrUtils
- , MARS.Core.Utils
- , MARS.Rtti.Utils
-;
-
-class function TJSONObjectHelper.TValueToJSONValue(
- const AValue: TValue): TJSONValue;
-var
- LArray: TJSONArray;
- LIndex: Integer;
-begin
- if AValue.IsEmpty and not AValue.IsArray then
- Result := TJSONNull.Create
-
- else if (AValue.Kind in [tkString, tkUString, tkChar, {$ifdef DelphiXE6_UP} tkWideChar, {$endif} tkLString, tkWString]) then
- Result := TJSONString.Create(AValue.AsString)
-
- else if AValue.IsArray then
- begin
- LArray := TJSONArray.Create;
- try
- for LIndex := 0 to AValue.GetArrayLength-1 do
- LArray.AddElement(TValueToJSONValue(AValue.GetArrayElement(LIndex)));
-
- Result := LArray;
- except
- LArray.Free;
- raise;
- end;
- end
-
- else if (AValue.Kind in [tkRecord]) then
- Result := TJSONObject.RecordToJSON(AValue)
-
- else if (AValue.IsType) then
- Result := BooleanToTJSON(AValue.AsType)
-
- else if AValue.TypeInfo = TypeInfo(TDateTime) then
- Result := TJSONString.Create( DateToJSON(AValue.AsType) )
- else if AValue.TypeInfo = TypeInfo(TDate) then
- Result := TJSONString.Create( DateToJSON(AValue.AsType) )
- else if AValue.TypeInfo = TypeInfo(TTime) then
- Result := TJSONString.Create( DateToJSON(AValue.AsType) )
-
- else if (AValue.Kind in [tkInt64]) then
- Result := TJSONNumber.Create( AValue.AsType )
- else if (AValue.Kind in [tkInteger]) then
- Result := TJSONNumber.Create( AValue.AsType )
-
- else if (AValue.Kind in [tkFloat]) then
- Result := TJSONNumber.Create( AValue.AsType )
-
- else if (AValue.Kind in [tkVariant]) then
- Result := TValueToJSONValue( TValue.FromVariant(AValue.AsVariant) )
-
- else if (AValue.IsInstanceOf(TObject)) then
- Result := ObjectToJSON(AValue.AsObject)
-
- else
- Result := TJSONString.Create(AValue.ToString);
-
-end;
-
-function StringArrayToJsonArray(const AStringArray: TArray): TJSONArray;
-var
- LIndex: Integer;
-begin
- Result := TJSONArray.Create;
- try
- for LIndex := Low(AStringArray) to High(AStringArray) do
- Result.Add(AStringArray[LIndex]);
- except
- Result.Free;
- raise;
- end;
-end;
-
-function JsonArrayToStringArray(const AJSONArray: TJSONArray): TArray;
-var
- LElement: TJSONValue;
- LIndex: Integer;
-begin
- SetLength(Result, AJSONArray.Count);
-
- for LIndex := 0 to AJSONArray.Count-1 do
- begin
- LElement := AJSONArray.Items[LIndex];
- if LElement is TJSONString then
- Result[LIndex] := TJSONString(LElement).Value
- else if LElement is TJSONNumber then
- Result[LIndex] := TJSONNumber(LElement).ToString
- else if LElement is TJSONTrue then
- Result[LIndex] := 'true'
- else if LElement is TJSONFalse then
- Result[LIndex] := 'false'
- else
- Result[LIndex] := LElement.ToString;
- end;
-end;
-
-{ TJSONValueHelper }
-{$ifndef DelphiXE7_UP}
-function TJSONValueHelper.TryGetValue(const APath: string;
- out AValue: T): Boolean;
-var
- LJSONValue: TJSONValue;
- LPair: TJSONPair;
-begin
- LJSONValue := nil;
- if Self is TJSONObject then
- begin
- LPair := TJSONObject(Self).Get(APath);
- if Assigned(LPair) then
- LJSONValue := LPair.JsonValue;
- end;
- Result := LJSONValue <> nil;
- if Result then
- begin
- try
- AValue := T(LJSONValue);
- except
- Result := False;
- end;
- end;
-end;
-{$endif}
-
-{$ifndef DelphiXE7_UP}
-function TJSONValueHelper.ToJSON: string;
-var
- LBytes: TBytes;
-begin
- SetLength(LBytes, Length(ToString) * 6);
- SetLength(LBytes, ToBytes(LBytes, 0));
- Result := TEncoding.Default.GetString(LBytes);
-end;
-{$endif}
-
-{ TJSONArrayEnumerator }
-
-{$ifndef DelphiXE6_UP}
-constructor TJSONArrayEnumerator.Create(const AArray: TJSONArray);
-begin
- inherited Create;
- FIndex := -1;
- FArray := AArray;
-end;
-
-function TJSONArrayEnumerator.GetCurrent: TJSONValue;
-begin
- Result := FArray.GetValue(FIndex);
-end;
-
-function TJSONArrayEnumerator.MoveNext: Boolean;
-begin
- Result := FIndex < FArray.Count - 1;
- if Result then
- Inc(FIndex);
-end;
-{$endif}
-
-{ TJSONArrayHelper }
-
-function TJSONArrayHelper.ToArrayOfRecord: TArray;
-var
- LElement: TJSONValue;
-begin
- Result := [];
- for LElement in Self do
- Result := Result + [(LElement as TJSONObject).ToRecord()]
-end;
-
-class function TJSONArrayHelper.ArrayOfObjectToJSON(
- const AArray: TArray): TJSONArray;
-begin
- Result := TJSONArray.Create;
- try
- Result.FromArrayOfObject(AArray);
- except
- Result.Free;
- raise;
- end;
-end;
-
-class function TJSONArrayHelper.ArrayOfRecordToJSON(const AArray: TArray;
- const AFilterProc: TToJSONFilterProc): TJSONArray;
-begin
- Result := TJSONArray.Create;
- try
- Result.FromArrayOfRecord(AArray, AFilterProc);
- except
- Result.Free;
- raise;
- end;
-end;
-
-function TJSONArrayHelper.ForEach(const AFunc: TFunc): Integer;
-var
- LIndex: Integer;
- LItem: TJSONValue;
-begin
- Result := 0;
- if not Assigned(AFunc) then
- Exit;
- for LIndex := 0 to Count-1 do
- begin
- LItem := Items[Lindex];
- if LItem is T then
- begin
- if not AFunc(T(LItem)) then
- Break;
- Inc(Result);
- end;
- end;
-end;
-
-procedure TJSONArrayHelper.FromArrayOfObject(const AArray: TArray;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]);
-var
- LObject: T;
- LObj: TJSONObject;
-begin
- // clear all
- while Count > 0 do
- Remove(0);
-
- for LObject in AArray do
- AddElement(TJSONObject.ObjectToJSON(LObject, AOptions));
-end;
-
-procedure TJSONArrayHelper.FromArrayOfRecord(const AArray: TArray;
- const AFilterProc: TToJSONFilterProc);
-var
- LRecord: T;
- LObj: TJSONObject;
-begin
- // clear all
- while Count > 0 do
- Remove(0);
-
- for LRecord in AArray do
- begin
- LObj := TJSONObject.Create;
- try
- LObj.FromRecord(LRecord, AFilterProc);
- AddElement(LObj);
- except
- LObj.Free;
- raise;
- end;
- end;
-end;
-
-
-{$ifndef DelphiXE6_UP}
-
-function TJSONArrayHelper.GetCount: Integer;
-begin
- Result := Size;
-end;
-
-function TJSONArrayHelper.GetEnumerator: TJSONArrayEnumerator;
-begin
- Result := TJSONArrayEnumerator.Create(Self);
-end;
-
-function TJSONArrayHelper.GetValue(const Index: Integer): TJSONValue;
-begin
- Result := Get(Index);
-end;
-{$endif}
-
-{ TJSONObjectHelper }
-
-{$ifndef DelphiXE6_UP}
-function TJSONObjectHelper.GetCount: Integer;
-begin
- Result := Size;
-end;
-
-function TJSONObjectHelper.GetPair(const Index: Integer): TJSONPair;
-begin
- Result := Get(Index);
-end;
-{$endif}
-
-function TJSONObjectHelper.GetExactPairName(
- const ACaseInsensitiveName: string): string;
-var
- LIndex: Integer;
- LPair: TJSONPair;
-begin
- Result := ACaseInsensitiveName;
- for LIndex := 0 to Count -1 do
- begin
- LPair := Pairs[LIndex];
- if SameText(LPair.JsonString.Value, ACaseInsensitiveName) then
- begin
- Result := LPair.JsonString.Value;
- Exit;
- end;
- end;
-end;
-
-
-class function TJSONObjectHelper.JSONToObject(const AClassType: TClass;
- const AJSON: TJSONObject; const AOptions: TJsonOptions): TObject;
-var
- LConstructor: TRttiMethod;
-begin
- Result := nil;
-
- LConstructor := TRTTIHelper.FindParameterLessConstructor(AClassType);
- if not Assigned(LConstructor) then
- Exit;
-
- Result := LConstructor.Invoke(AClassType, []).AsObject;
- try
- TJson.JsonToObject(Result, AJSON, AOptions);
- except
- Result.Free;
- raise;
- end;
-end;
-
-class function TJSONObjectHelper.JSONToObject(const AJSON: TJSONObject;
- const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): T;
-begin
- Result := TJSON.JsonToObject(AJSON, AOptions);
-end;
-
-class function TJSONObjectHelper.JSONToRecord(const ARecordType: TRttiType;
- const AJSON: TJSONObject; const AFilterProc: TToRecordFilterProc): TValue;
-begin
- Assert(Assigned(AJSON));
- Result := AJSON.ToRecord(ARecordType, AFilterProc);
-end;
-
-class function TJSONObjectHelper.JSONToRecord(const AJSON: TJSONObject;
- const AFilterProc: TToRecordFilterProc = nil): T;
-begin
- Assert(Assigned(AJSON));
- Result := AJSON.ToRecord(AFilterProc);
-end;
-
-class function TJSONObjectHelper.ObjectToJSON(const AObject: TObject;
- const AOptions: TJsonOptions): TJSONObject;
-begin
- Result := TJSON.ObjectToJsonObject(AObject, AOptions);
-end;
-
-function TJSONObjectHelper.ReadArrayValue(const AName: string): TJSONArray;
-begin
- Result := nil;
- TryGetValue(AName, Result);
-end;
-
-function TJSONObjectHelper.ReadArrayValue(const AName: string): TArray;
-var
- LArray: TJSONArray;
-begin
- LArray := ReadArrayValue(AName);
- if Assigned(LArray) then
- Result := LArray.ToArrayOfRecord
- else
- Result := [];
-end;
-
-function TJSONObjectHelper.ReadBoolValue(const AName: string; const ADefault: Boolean): Boolean;
-{$ifdef Delphi10Seattle_UP}
-var
- LValue: TJSONBool;
-begin
- Result := ADefault;
- if Assigned(Self) and TryGetValue(AName, LValue) then
- Result := LValue is TJSONTrue;
-end;
-{$else}
-var
- LValue: TJSONValue;
-begin
- Result := ADefault;
- if Assigned(Self) and TryGetValue(AName, LValue) then
- Result := LValue is TJSONTrue;
-end;
-{$endif}
-
-
-function TJSONObjectHelper.ReadDateTimeValue(const AName: string; const ADefault: TDateTime;
- const AReturnUTC: Boolean): TDateTime;
-begin
- Result := ADefault;
- if Assigned(Self) then
- Result := JSONToDate(ReadStringValue(AName), AReturnUTC);
-end;
-
-function TJSONObjectHelper.ReadDoubleValue(const AName: string;
- const ADefault: Double): Double;
-var
- LValue: TJSONNumber;
-begin
- Result := ADefault;
- if Assigned(Self) and TryGetValue(AName, LValue) then
- Result := LValue.AsDouble;
-end;
-
-procedure TJSONObjectHelper.FromRecord(const ARecord: TValue; const AFilterProc: TToJSONFilterProc = nil);
-
- function GetRecordFilterProc(const ARecordType: TRttiType): TToJSONFilterProc;
- var
- LMethod: TRttiMethod;
- begin
- Result := nil;
- // looking for TMyRecord.ToJSONFilter(const AField: TRttiField; const AObj: TJSONObject): Boolean;
-
- LMethod := ARecordType.FindMethodFunc('ToJSONFilter');
- if Assigned(LMethod) then
- Result :=
- procedure (const AField: TRttiField; const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean)
- begin
- AAccept := LMethod.Invoke(ARecord, [AField, AJSONObject]).AsBoolean;
- end;
- end;
-
-var
- LType: TRttiType;
- LField: TRttiField;
- LFilterProc: TToJSONFilterProc;
- LAccept: Boolean;
- LValue: TValue;
- LJSONName: string;
-begin
- LType := TRttiContext.Create.GetType(ARecord.TypeInfo);
-
- LFilterProc := AFilterProc;
- if not Assigned(LFilterProc) then
- LFilterProc := GetRecordFilterProc(LType);
-
- for LField in LType.GetFields do
- begin
- LAccept := True;
- if Assigned(LFilterProc) then
- LFilterProc(LField, ARecord, Self, LAccept);
-
- if LAccept then
- begin
- LJSONName := LField.Name;
- LField.HasAttribute(
- procedure (AAttr: JSONNameAttribute)
- begin
- LJSONName := AAttr.Name;
- end
- );
- if LJSONName <> '' then
- begin
- LValue := LField.GetValue(ARecord.GetReferenceToRawData);
-
- {$ifdef Delphi10Tokyo_UP}
- if LValue.IsType(False) and (not LValue.IsArray) then
- {$else}
- if LValue.IsType and (not LValue.IsArray) then
- {$endif}
- WriteTValue(LJSONName, LValue.AsType) //unboxing TValue from TValue
- else
- WriteTValue(LJSONName, LValue);
- end;
- end;
- end;
-end;
-
-procedure TJSONObjectHelper.FromRecord(ARecord: T; const AFilterProc: TToJSONFilterProc = nil);
-begin
- FromRecord(TValue.From(ARecord), AFilterProc);
-end;
-
-{$ifdef DelphiXE6_UP}
-function TJSONObjectHelper.ReadInt64Value(const AName: string;
- const ADefault: Int64): Int64;
-var
- LValue: TJSONNumber;
-begin
- Result := ADefault;
- if Assigned(Self) and TryGetValue(AName, LValue) then
- Result := LValue.AsInt64;
-end;
-{$endif}
-
-function TJSONObjectHelper.ReadIntegerValue(const AName: string;
- const ADefault: Integer): Integer;
-var
- LValue: TJSONNumber;
-begin
- Result := ADefault;
- if Assigned(Self) and TryGetValue(AName, LValue) then
- Result := LValue.AsInt;
-end;
-
-function TJSONObjectHelper.ReadStringValue(const AName,
- ADefault: string): string;
-var
- LPair: TJSONPair;
-begin
- Result := ADefault;
- if not Assigned(Self) then
- Exit;
-
-{$ifdef DelphiXE6_UP}
- LPair := GetPairByName(AName);
-{$else}
- LPair := Get(AName);
-{$endif}
- if Assigned(LPair) then
- Result := LPair.JsonValue.Value;
-end;
-
-function TJSONObjectHelper.ReadUnixTimeValue(const AName: string;
- const ADefault: TDateTime): TDateTime;
-var
- LValue: Int64;
-begin
- Result := ADefault;
-{$ifdef DelphiXE6_UP}
- LValue := ReadInt64Value(AName);
-{$else}
- LValue := ReadIntegerValue(AName);
-{$endif}
- if LValue <> 0 then
- Result := UnixToDateTime(LValue)
-end;
-
-function TJSONObjectHelper.ReadValue(const AName: string;
- const ADesiredType: TRttiType; const ANameCaseSensitive: Boolean;
- out AValue: TValue): Boolean;
-var
- LValue: TJSONValue;
- LName: string;
-begin
- LName := AName;
- if not ANameCaseSensitive then
- LName := GetExactPairName(LName);
-
- Result := TryGetValue(LName, LValue);
- if Result then
- AValue := TJSONValueToTValue(LValue, ADesiredType);
-end;
-
-function TJSONObjectHelper.ReadValue(const AName: string;
- const ADefault: TValue; const ADesiredType: TRttiType;
- const ANameCaseSensitive: Boolean): TValue;
-begin
- Result := ADefault;
- ReadValue(AName, ADesiredType, ANameCaseSensitive, Result);
-end;
-
-class function TJSONObjectHelper.RecordToJSON(const ARecord: TValue;
- const AFilterProc: TToJSONFilterProc): TJSONObject;
-begin
- Result := TJSONObject.Create;
- try
- Result.FromRecord(ARecord, AFilterProc);
- except
- Result.Free;
- raise;
- end;
-end;
-
-class function TJSONObjectHelper.RecordToJSON(ARecord: T;
- const AFilterProc: TToJSONFilterProc): TJSONObject;
-begin
- Result := TJSONObject.Create;
- try
- Result.FromRecord(ARecord, AFilterProc);
- except
- Result.Free;
- raise;
- end;
-end;
-
-class function TJSONObjectHelper.TJSONValueToTValue(
- const AValue: TJSONValue; const ADesiredType: TRttiType): TValue;
-var
- LArray: TValue;
- LElementType: TRttiType;
- LJSONArray: TJSONArray;
- LJSONElement: TJSONValue;
- LIndex: Integer;
-begin
-{$ifdef Delphi10Berlin_UP}
- if AValue is TJSONBool then // Boolean
- Result := TJSONBool(AValue).AsBoolean
-{$else}
- if (AValue is TJSONTrue) or (AValue is TJSONFalse) then
- Result := AValue is TJSONTrue
-{$endif}
-// else if ADesiredType.Handle = TypeInfo(Variant) then
-// Result := TValue.
- else if AValue is TJSONNumber then // Numbers (Integer and Float)
- begin
-{$ifdef DelphiXE6_UP}
- if ADesiredType.TypeKind in [tkInt64] then
- Result := TJSONNumber(AValue).AsInt64
- else
-{$endif}
- if ADesiredType.TypeKind in [tkInteger] then
- Result := TJSONNumber(AValue).AsInt
- else
- begin
- if ADesiredType.Handle = TypeInfo(TValue) then
- Result := GuessTValueFromString(AValue.ToString)
- else
- Result := TJSONNumber(AValue).AsDouble;
- end;
-
- end
- else if AValue is TJSONString then
- begin
- if ADesiredType is TRttiEnumerationType then // enumerated types
- Result := TValue.FromOrdinal(ADesiredType.Handle, GetEnumValue(ADesiredType.Handle, TJSONString(AValue).Value))
- else if (ADesiredType.Handle = TypeInfo(TDateTime)) // dates
- or (ADesiredType.Handle = TypeInfo(TDate))
- or (ADesiredType.Handle = TypeInfo(TTime))
- then
- Result := JSONToDate(TJSONString(AValue).Value)
- else
- begin // strings
- if (ADesiredType.Handle = TypeInfo(TValue)) or (ADesiredType.Handle = TypeInfo(Variant)) then
- Result := GuessTValueFromString(TJSONString(AValue).Value)
- else
- Result := TJSONString(AValue).Value;
- end;
- end
- else if AValue is TJSONNull then // null values
- Result := TValue.Empty
- else if AValue is TJSONObject then
- Result := TJSONObject(AValue).ToRecord(ADesiredType)
- else if (AValue is TJSONArray) then
- begin
- LJSONArray := TJSONArray(AValue);
- if ADesiredType.IsArray(LElementType) then
- begin
- TValue.Make(nil, ADesiredType.Handle, LArray);
- SetArrayLength(LArray, ADesiredType, LJSONArray.Count);
- for LIndex := 0 to LJSONArray.Count-1 do
- begin
- LJSONElement := LJSONArray.Items[LIndex];
- LArray.SetArrayElement(LIndex, TJSONValueToTValue(LJSONElement, LElementType));
- end;
- Result := LArray;
- end;
- end
- else
- raise Exception.CreateFmt('Unable to put JSON Value [%s] in TValue', [AValue.ClassName]);
-end;
-
-function TJSONObjectHelper.ToRecord(const ARecordType: TRttiType;
- const AFilterProc: TToRecordFilterProc = nil): TValue;
-var
- LField: TRttiField;
- LValue: TValue;
- LRecordInstance: Pointer;
- LFilterProc: TToRecordFilterProc;
- LAccept: Boolean;
- LJSONName: string;
- LAssignedValuesField: TRttiField;
- LAssignedValues: TArray;
-
- function GetRecordFilterProc: TToRecordFilterProc;
- var
- LMethod: TRttiMethod;
- begin
- Result := nil;
- // looking for TMyRecord.ToRecordFilter(const AField: TRttiField; const AObj: TJSONObject): Boolean;
-
- LMethod := ARecordType.FindMethodFunc('ToRecordFilter');
- if Assigned(LMethod) then
- Result :=
- procedure (const AField: TRttiField; const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean)
- begin
- AAccept := LMethod.Invoke(ARecord, [AField, AJSONObject]).AsBoolean;
- end;
- end;
-
-begin
- TValue.Make(nil, ARecordType.Handle, Result);
- LRecordInstance := Result.GetReferenceToRawData;
-
- LFilterProc := AFilterProc;
- if not Assigned(LFilterProc) then
- LFilterProc := GetRecordFilterProc();
-
- LAssignedValuesField := ARecordType.GetField('_AssignedValues');
- if Assigned(LAssignedValuesField)
- and not LAssignedValuesField.FieldType.IsDynamicArrayOf
- then
- LAssignedValuesField := nil;
- LAssignedValues := [];
-
- for LField in ARecordType.GetFields do
- begin
- LAccept := True;
- if Assigned(LFilterProc) then
- LFilterProc(LField, Result, Self, LAccept);
-
- if LAccept then
- begin
- LJSONName := LField.Name;
- LField.HasAttribute(
- procedure (AAttr: JSONNameAttribute)
- begin
- LJSONName := AAttr.Name;
- end
- );
- if LJSONName <> '' then
- begin
- if ReadValue(LJSONName, LField.FieldType, True, LValue) then
- begin
- LField.SetValue(LRecordInstance, LValue);
- LAssignedValues := LAssignedValues + [LField.Name];
- end
- else
- LField.SetValue(LRecordInstance, TValue.Empty);
- end;
- end;
- end;
- if Assigned(LAssignedValuesField) then
- LAssignedValuesField.SetValue(LRecordInstance, TValue.From>(LAssignedValues));
-end;
-
-function TJSONObjectHelper.ToRecord(const AFilterProc: TToRecordFilterProc = nil): T;
-begin
- Result := ToRecord(TRttiContext.Create.GetType(TypeInfo(T)), AFilterProc).AsType;
-end;
-
-procedure TJSONObjectHelper.WriteArrayValue(const AName: string;
- const AArray: TJSONArray);
-begin
- AddPair(AName, AArray);
-end;
-
-procedure TJSONObjectHelper.WriteArrayValue(const AName: string;
- const AArray: TArray);
-begin
- WriteArrayValue(AName, TJSONArray.ArrayOfRecordToJSON(AArray));
-end;
-
-procedure TJSONObjectHelper.WriteBoolValue(const AName: string;
- const AValue: Boolean);
-var
- LDummy: TJSONValue;
-begin
- if TryGetValue(AName, LDummy) then
- RemovePair(AName);
-
- AddPair(AName, BooleanToTJSON(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteDateTimeValue(const AName: string;
- const AValue: TDateTime; const AInputIsUTC: Boolean);
-begin
- WriteStringValue(AName, DateToJSON(AValue, AInputIsUTC));
-end;
-
-procedure TJSONObjectHelper.WriteDoubleValue(const AName: string;
- const AValue: Double);
-var
- LDummy: TJSONValue;
-begin
- if TryGetValue(AName, LDummy) then
- RemovePair(AName);
-
- AddPair(AName, TJSONNumber.Create(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteInt64Value(const AName: string;
- const AValue: Int64);
-var
- LDummy: TJSONValue;
-begin
- if TryGetValue(AName, LDummy) then
- RemovePair(AName);
-
- AddPair(AName, TJSONNumber.Create(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteIntegerValue(const AName: string;
- const AValue: Integer);
-var
- LDummy: TJSONValue;
-begin
- if TryGetValue(AName, LDummy) then
- RemovePair(AName);
-
- AddPair(AName, TJSONNumber.Create(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteStringValue(const AName, AValue: string);
-var
- LDummy: TJSONValue;
-begin
- if TryGetValue(AName, LDummy) then
- RemovePair(AName);
-
- if AValue <> '' then
- AddPair(AName, TJSONString.Create(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteTValue(const AName: string;
- const AValue: TValue);
-begin
- AddPair(AName, TValueToJSONValue(AValue));
-end;
-
-procedure TJSONObjectHelper.WriteUnixTimeValue(const AName: string;
- const AValue: TDateTime);
-begin
- WriteInt64Value(AName, DateTimeToUnix(AValue));
-end;
-
-{ JSONNameAttribute }
-
-constructor JSONNameAttribute.Create(const AName: string);
-begin
- inherited Create;
- FName := AName;
-end;
-
-end.
\ No newline at end of file
+(*
+ Copyright 2016, MARS-Curiosity library
+
+ Home: https://github.com/andrea-magni/MARS
+*)
+unit MARS.Core.JSON;
+
+{$I MARS.inc}
+
+interface
+
+uses
+{$IFDEF Delphi10Rio_UP}
+ Generics.Collections,
+{$ENDIF}
+{$ifdef DelphiXE6_UP}
+ JSON
+{$else}
+ DBXJSON
+{$endif}
+ , SysUtils
+{$ifdef DelphiXE2_UP}
+ , System.Rtti
+{$else}
+ , Rtti
+{$endif}
+ , TypInfo, REST.JSON
+;
+
+type
+ TJSONAncestor = {$ifdef DelphiXE6_UP}JSON.TJSONAncestor{$else}DBXJSON.TJSONAncestor{$endif};
+ TJSONPair = {$ifdef DelphiXE6_UP}JSON.TJSONPair{$else}DBXJSON.TJSONPair{$endif};
+ TJSONValue = {$ifdef DelphiXE6_UP}JSON.TJSONValue{$else}DBXJSON.TJSONValue{$endif};
+ TJSONTrue = {$ifdef DelphiXE6_UP}JSON.TJSONTrue{$else}DBXJSON.TJSONTrue{$endif};
+ TJSONString = {$ifdef DelphiXE6_UP}JSON.TJSONString{$else}DBXJSON.TJSONString{$endif};
+ TJSONNumber = {$ifdef DelphiXE6_UP}JSON.TJSONNumber{$else}DBXJSON.TJSONNumber{$endif};
+ TJSONObject = {$ifdef DelphiXE6_UP}JSON.TJSONObject{$else}DBXJSON.TJSONObject{$endif};
+ TJSONNull = {$ifdef DelphiXE6_UP}JSON.TJSONNull{$else}DBXJSON.TJSONNull{$endif};
+ TJSONFalse = {$ifdef DelphiXE6_UP}JSON.TJSONFalse{$else}DBXJSON.TJSONFalse{$endif};
+ TJSONArray = {$ifdef DelphiXE6_UP}JSON.TJSONArray{$else}DBXJSON.TJSONArray{$endif};
+
+ TJSONValueHelper = class helper for TJSONValue
+ public
+{$ifndef DelphiXE7_UP}
+ function TryGetValue(const APath: string; out AValue: T): Boolean; overload;
+ function ToJSON: string;
+{$endif}
+ end;
+
+ JSONNameAttribute = class(TCustomAttribute)
+ private
+ FName: string;
+ public
+ constructor Create(const AName: string);
+ property Name: string read FName;
+ end;
+
+ TToRecordFilterProc = reference to procedure (const AField: TRttiField;
+ const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean);
+
+ TToJSONFilterProc = reference to procedure (const AField: TRttiField;
+ const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean);
+
+ TJSONRawString = type string;
+
+{$ifndef DelphiXE6_UP}
+ TJSONArrayEnumerator = class
+ private
+ FIndex: Integer;
+ FArray: TJSONArray;
+ public
+ constructor Create(const AArray: TJSONArray);
+ function GetCurrent: TJSONValue; inline;
+ function MoveNext: Boolean;
+ property Current: TJSONValue read GetCurrent;
+ end;
+{$endif}
+
+ TJSONArrayHelper= class helper for TJSONArray
+ private
+ {$ifndef DelphiXE6_UP}
+ function GetCount: Integer; inline;
+ function GetValue(const Index: Integer): TJSONValue; inline;
+ {$endif}
+ public
+ function ToArrayOfRecord(): TArray;
+ procedure FromArrayOfRecord(const AArray: TArray;
+ const AFilterProc: TToJSONFilterProc = nil);
+ procedure FromArrayOfObject(const AArray: TArray;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]);
+ function ForEach(const AFunc: TFunc): Integer;
+
+ {$ifndef DelphiXE6_UP}
+ function GetEnumerator: TJSONArrayEnumerator;
+
+ property Count: Integer read GetCount;
+ property Items[const Index: Integer]: TJSONValue read GetValue;
+ {$endif}
+
+ class function ArrayOfRecordToJSON(const AArray: TArray; const AFilterProc: TToJSONFilterProc = nil): TJSONArray;
+ class function ArrayOfObjectToJSON(const AArray: TArray): TJSONArray;
+ end;
+
+ TJSONObjectHelper = class helper(TJSONValueHelper) for TJSONObject
+ private
+{$ifndef DelphiXE6_UP}
+ function GetCount: Integer; inline;
+ function GetPair(const Index: Integer): TJSONPair; inline;
+{$endif}
+ function GetExactPairName(const ACaseInsensitiveName: string): string;
+ public
+ function ReadStringValue(const AName: string; const ADefault: string = ''): string;
+ function ReadIntegerValue(const AName: string; const ADefault: Integer = 0): Integer;
+{$ifdef DelphiXE6_UP}
+ function ReadInt64Value(const AName: string; const ADefault: Int64 = 0): Int64;
+{$endif}
+ function ReadDoubleValue(const AName: string; const ADefault: Double = 0.0): Double;
+ function ReadBoolValue(const AName: string; const ADefault: Boolean = False): Boolean;
+ function ReadDateTimeValue(const AName: string; const ADefault: TDateTime = 0.0;
+ const AReturnUTC: Boolean = False): TDateTime;
+ function ReadUnixTimeValue(const AName: string; const ADefault: TDateTime = 0.0): TDateTime;
+ function ReadValue(const AName: string; const ADefault: TValue;
+ const ADesiredType: TRttiType; const ANameCaseSensitive: Boolean = True): TValue; overload;
+ function ReadValue(const AName: string; const ADesiredType: TRttiType;
+ const ANameCaseSensitive: Boolean; out AValue: TValue): Boolean; overload;
+ function ReadArrayValue(const AName: string): TJSONArray; overload; inline;
+ function ReadArrayValue(const AName: string): TArray; overload; inline;
+
+ procedure WriteStringValue(const AName: string; const AValue: string);
+ procedure WriteIntegerValue(const AName: string; const AValue: Integer);
+ procedure WriteInt64Value(const AName: string; const AValue: Int64);
+ procedure WriteDoubleValue(const AName: string; const AValue: Double);
+ procedure WriteBoolValue(const AName: string; const AValue: Boolean);
+ procedure WriteDateTimeValue(const AName: string; const AValue: TDateTime;
+ const AInputIsUTC: Boolean = False);
+ procedure WriteUnixTimeValue(const AName: string; const AValue: TDateTime);
+ procedure WriteTValue(const AName: string; const AValue: TValue);
+ procedure WriteArrayValue(const AName: string; const AArray: TJSONArray); overload; inline;
+ procedure WriteArrayValue(const AName: string; const AArray: TArray); overload; inline;
+
+ procedure FromRecord(ARecord: T; const AFilterProc: TToJSONFilterProc = nil); overload;
+ procedure FromRecord(const ARecord: TValue; const AFilterProc: TToJSONFilterProc = nil); overload;
+ function ToRecord(const AFilterProc: TToRecordFilterProc = nil): T; overload;
+ function ToRecord(const ARecordType: TRttiType;
+ const AFilterProc: TToRecordFilterProc = nil): TValue; overload;
+
+{$ifndef DelphiXE6_UP}
+ property Count: Integer read GetCount;
+ property Pairs[const Index: Integer]: TJSONPair read GetPair;
+{$endif}
+
+ class function ObjectToJSON(const AObject: TObject;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): TJSONObject; overload;
+
+ class function JSONToObject(const AJSON: TJSONObject;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): T; overload;
+
+ class function JSONToObject(const AClassType: TClass; const AJSON: TJSONObject;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): TObject; overload;
+
+ class function RecordToJSON(ARecord: T;
+ const AFilterProc: TToJSONFilterProc = nil): TJSONObject; overload;
+ class function RecordToJSON(const ARecord: TValue;
+ const AFilterProc: TToJSONFilterProc = nil): TJSONObject; overload;
+
+ class function JSONToRecord(const AJSON: TJSONObject;
+ const AFilterProc: TToRecordFilterProc = nil): T; overload;
+ class function JSONToRecord(const ARecordType: TRttiType; const AJSON: TJSONObject;
+ const AFilterProc: TToRecordFilterProc = nil): TValue; overload;
+
+ class function TValueToJSONValue(const AValue: TValue): TJSONValue;
+ class function TJSONValueToTValue(const AValue: TJSONValue; const ADesiredType: TRttiType): TValue;
+ end;
+
+ function StringArrayToJsonArray(const AStringArray: TArray): TJSONArray;
+ function JsonArrayToStringArray(const AJSONArray: TJSONArray): TArray;
+
+implementation
+
+uses
+ DateUtils, Variants, StrUtils
+ , MARS.Core.Utils
+ , MARS.Rtti.Utils
+;
+
+class function TJSONObjectHelper.TValueToJSONValue(
+ const AValue: TValue): TJSONValue;
+var
+ LArray: TJSONArray;
+ LIndex: Integer;
+begin
+ if AValue.IsEmpty and not AValue.IsArray then
+ Result := TJSONNull.Create
+
+ else if (AValue.Kind in [tkString, tkUString, tkChar, {$ifdef DelphiXE6_UP} tkWideChar, {$endif} tkLString, tkWString]) then
+ Result := TJSONString.Create(AValue.AsString)
+
+ else if AValue.IsArray then
+ begin
+ LArray := TJSONArray.Create;
+ try
+ for LIndex := 0 to AValue.GetArrayLength-1 do
+ LArray.AddElement(TValueToJSONValue(AValue.GetArrayElement(LIndex)));
+
+ Result := LArray;
+ except
+ LArray.Free;
+ raise;
+ end;
+ end
+
+ else if (AValue.Kind in [tkRecord]) then
+ Result := TJSONObject.RecordToJSON(AValue)
+
+ else if (AValue.IsType) then
+ Result := BooleanToTJSON(AValue.AsType)
+
+ else if AValue.TypeInfo = TypeInfo(TDateTime) then
+ Result := TJSONString.Create( DateToJSON(AValue.AsType) )
+ else if AValue.TypeInfo = TypeInfo(TDate) then
+ Result := TJSONString.Create( DateToJSON(AValue.AsType) )
+ else if AValue.TypeInfo = TypeInfo(TTime) then
+ Result := TJSONString.Create( DateToJSON(AValue.AsType) )
+
+ else if (AValue.Kind in [tkInt64]) then
+ Result := TJSONNumber.Create( AValue.AsType )
+ else if (AValue.Kind in [tkInteger]) then
+ Result := TJSONNumber.Create( AValue.AsType )
+
+ else if (AValue.Kind in [tkFloat]) then
+ Result := TJSONNumber.Create( AValue.AsType )
+
+ else if (AValue.Kind in [tkVariant]) then
+ Result := TValueToJSONValue( TValue.FromVariant(AValue.AsVariant) )
+
+ else if (AValue.IsInstanceOf(TObject)) then
+ Result := ObjectToJSON(AValue.AsObject)
+
+ else
+ Result := TJSONString.Create(AValue.ToString);
+
+end;
+
+function StringArrayToJsonArray(const AStringArray: TArray): TJSONArray;
+var
+ LIndex: Integer;
+begin
+ Result := TJSONArray.Create;
+ try
+ for LIndex := Low(AStringArray) to High(AStringArray) do
+ Result.Add(AStringArray[LIndex]);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+function JsonArrayToStringArray(const AJSONArray: TJSONArray): TArray;
+var
+ LElement: TJSONValue;
+ LIndex: Integer;
+begin
+ SetLength(Result, AJSONArray.Count);
+
+ for LIndex := 0 to AJSONArray.Count-1 do
+ begin
+ LElement := AJSONArray.Items[LIndex];
+ if LElement is TJSONString then
+ Result[LIndex] := TJSONString(LElement).Value
+ else if LElement is TJSONNumber then
+ Result[LIndex] := TJSONNumber(LElement).ToString
+ else if LElement is TJSONTrue then
+ Result[LIndex] := 'true'
+ else if LElement is TJSONFalse then
+ Result[LIndex] := 'false'
+ else
+ Result[LIndex] := LElement.ToString;
+ end;
+end;
+
+{ TJSONValueHelper }
+{$ifndef DelphiXE7_UP}
+function TJSONValueHelper.TryGetValue(const APath: string;
+ out AValue: T): Boolean;
+var
+ LJSONValue: TJSONValue;
+ LPair: TJSONPair;
+begin
+ LJSONValue := nil;
+ if Self is TJSONObject then
+ begin
+ LPair := TJSONObject(Self).Get(APath);
+ if Assigned(LPair) then
+ LJSONValue := LPair.JsonValue;
+ end;
+ Result := LJSONValue <> nil;
+ if Result then
+ begin
+ try
+ AValue := T(LJSONValue);
+ except
+ Result := False;
+ end;
+ end;
+end;
+{$endif}
+
+{$ifndef DelphiXE7_UP}
+function TJSONValueHelper.ToJSON: string;
+var
+ LBytes: TBytes;
+begin
+ SetLength(LBytes, Length(ToString) * 6);
+ SetLength(LBytes, ToBytes(LBytes, 0));
+ Result := TEncoding.Default.GetString(LBytes);
+end;
+{$endif}
+
+{ TJSONArrayEnumerator }
+
+{$ifndef DelphiXE6_UP}
+constructor TJSONArrayEnumerator.Create(const AArray: TJSONArray);
+begin
+ inherited Create;
+ FIndex := -1;
+ FArray := AArray;
+end;
+
+function TJSONArrayEnumerator.GetCurrent: TJSONValue;
+begin
+ Result := FArray.GetValue(FIndex);
+end;
+
+function TJSONArrayEnumerator.MoveNext: Boolean;
+begin
+ Result := FIndex < FArray.Count - 1;
+ if Result then
+ Inc(FIndex);
+end;
+{$endif}
+
+{ TJSONArrayHelper }
+
+function TJSONArrayHelper.ToArrayOfRecord: TArray;
+var
+ LElement: TJSONValue;
+begin
+ Result := [];
+ for LElement in Self do
+ Result := Result + [(LElement as TJSONObject).ToRecord()]
+end;
+
+class function TJSONArrayHelper.ArrayOfObjectToJSON(
+ const AArray: TArray): TJSONArray;
+begin
+ Result := TJSONArray.Create;
+ try
+ Result.FromArrayOfObject(AArray);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+class function TJSONArrayHelper.ArrayOfRecordToJSON(const AArray: TArray;
+ const AFilterProc: TToJSONFilterProc): TJSONArray;
+begin
+ Result := TJSONArray.Create;
+ try
+ Result.FromArrayOfRecord(AArray, AFilterProc);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+function TJSONArrayHelper.ForEach(const AFunc: TFunc): Integer;
+var
+ LIndex: Integer;
+ LItem: TJSONValue;
+begin
+ Result := 0;
+ if not Assigned(AFunc) then
+ Exit;
+ for LIndex := 0 to Count-1 do
+ begin
+ LItem := Items[Lindex];
+ if LItem is T then
+ begin
+ if not AFunc(T(LItem)) then
+ Break;
+ Inc(Result);
+ end;
+ end;
+end;
+
+procedure TJSONArrayHelper.FromArrayOfObject(const AArray: TArray;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]);
+var
+ LObject: T;
+ LObj: TJSONObject;
+begin
+ // clear all
+ while Count > 0 do
+ Remove(0);
+
+ for LObject in AArray do
+ AddElement(TJSONObject.ObjectToJSON(LObject, AOptions));
+end;
+
+procedure TJSONArrayHelper.FromArrayOfRecord(const AArray: TArray;
+ const AFilterProc: TToJSONFilterProc);
+var
+ LRecord: T;
+ LObj: TJSONObject;
+begin
+ // clear all
+ while Count > 0 do
+ Remove(0);
+
+ for LRecord in AArray do
+ begin
+ LObj := TJSONObject.Create;
+ try
+ LObj.FromRecord(LRecord, AFilterProc);
+ AddElement(LObj);
+ except
+ LObj.Free;
+ raise;
+ end;
+ end;
+end;
+
+
+{$ifndef DelphiXE6_UP}
+
+function TJSONArrayHelper.GetCount: Integer;
+begin
+ Result := Size;
+end;
+
+function TJSONArrayHelper.GetEnumerator: TJSONArrayEnumerator;
+begin
+ Result := TJSONArrayEnumerator.Create(Self);
+end;
+
+function TJSONArrayHelper.GetValue(const Index: Integer): TJSONValue;
+begin
+ Result := Get(Index);
+end;
+{$endif}
+
+{ TJSONObjectHelper }
+
+{$ifndef DelphiXE6_UP}
+function TJSONObjectHelper.GetCount: Integer;
+begin
+ Result := Size;
+end;
+
+function TJSONObjectHelper.GetPair(const Index: Integer): TJSONPair;
+begin
+ Result := Get(Index);
+end;
+{$endif}
+
+function TJSONObjectHelper.GetExactPairName(
+ const ACaseInsensitiveName: string): string;
+var
+ LIndex: Integer;
+ LPair: TJSONPair;
+begin
+ Result := ACaseInsensitiveName;
+ for LIndex := 0 to Count -1 do
+ begin
+ LPair := Pairs[LIndex];
+ if SameText(LPair.JsonString.Value, ACaseInsensitiveName) then
+ begin
+ Result := LPair.JsonString.Value;
+ Exit;
+ end;
+ end;
+end;
+
+
+class function TJSONObjectHelper.JSONToObject(const AClassType: TClass;
+ const AJSON: TJSONObject; const AOptions: TJsonOptions): TObject;
+var
+ LConstructor: TRttiMethod;
+begin
+ Result := nil;
+
+ LConstructor := TRTTIHelper.FindParameterLessConstructor(AClassType);
+ if not Assigned(LConstructor) then
+ Exit;
+
+ Result := LConstructor.Invoke(AClassType, []).AsObject;
+ try
+ TJson.JsonToObject(Result, AJSON, AOptions);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+class function TJSONObjectHelper.JSONToObject(const AJSON: TJSONObject;
+ const AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): T;
+begin
+ Result := TJSON.JsonToObject(AJSON, AOptions);
+end;
+
+class function TJSONObjectHelper.JSONToRecord(const ARecordType: TRttiType;
+ const AJSON: TJSONObject; const AFilterProc: TToRecordFilterProc): TValue;
+begin
+ Assert(Assigned(AJSON));
+ Result := AJSON.ToRecord(ARecordType, AFilterProc);
+end;
+
+class function TJSONObjectHelper.JSONToRecord(const AJSON: TJSONObject;
+ const AFilterProc: TToRecordFilterProc = nil): T;
+begin
+ Assert(Assigned(AJSON));
+ Result := AJSON.ToRecord(AFilterProc);
+end;
+
+class function TJSONObjectHelper.ObjectToJSON(const AObject: TObject;
+ const AOptions: TJsonOptions): TJSONObject;
+begin
+ Result := TJSON.ObjectToJsonObject(AObject, AOptions);
+end;
+
+function TJSONObjectHelper.ReadArrayValue(const AName: string): TJSONArray;
+begin
+ Result := nil;
+ TryGetValue(AName, Result);
+end;
+
+function TJSONObjectHelper.ReadArrayValue(const AName: string): TArray;
+var
+ LArray: TJSONArray;
+begin
+ LArray := ReadArrayValue(AName);
+ if Assigned(LArray) then
+ Result := LArray.ToArrayOfRecord
+ else
+ Result := [];
+end;
+
+function TJSONObjectHelper.ReadBoolValue(const AName: string; const ADefault: Boolean): Boolean;
+{$ifdef Delphi10Seattle_UP}
+var
+ LValue: TJSONBool;
+begin
+ Result := ADefault;
+ if Assigned(Self) and TryGetValue(AName, LValue) then
+ Result := LValue is TJSONTrue;
+end;
+{$else}
+var
+ LValue: TJSONValue;
+begin
+ Result := ADefault;
+ if Assigned(Self) and TryGetValue(AName, LValue) then
+ Result := LValue is TJSONTrue;
+end;
+{$endif}
+
+
+function TJSONObjectHelper.ReadDateTimeValue(const AName: string; const ADefault: TDateTime;
+ const AReturnUTC: Boolean): TDateTime;
+begin
+ Result := ADefault;
+ if Assigned(Self) then
+ Result := JSONToDate(ReadStringValue(AName), AReturnUTC, ADefault);
+end;
+
+function TJSONObjectHelper.ReadDoubleValue(const AName: string;
+ const ADefault: Double): Double;
+var
+ LValue: TJSONNumber;
+begin
+ Result := ADefault;
+ if Assigned(Self) and TryGetValue(AName, LValue) then
+ Result := LValue.AsDouble;
+end;
+
+procedure TJSONObjectHelper.FromRecord(const ARecord: TValue; const AFilterProc: TToJSONFilterProc = nil);
+
+ function GetRecordFilterProc(const ARecordType: TRttiType): TToJSONFilterProc;
+ var
+ LMethod: TRttiMethod;
+ begin
+ Result := nil;
+ // looking for TMyRecord.ToJSONFilter(const AField: TRttiField; const AObj: TJSONObject): Boolean;
+
+ LMethod := ARecordType.FindMethodFunc('ToJSONFilter');
+ if Assigned(LMethod) then
+ Result :=
+ procedure (const AField: TRttiField; const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean)
+ begin
+ AAccept := LMethod.Invoke(ARecord, [AField, AJSONObject]).AsBoolean;
+ end;
+ end;
+
+var
+ LType: TRttiType;
+ LField: TRttiField;
+ LFilterProc: TToJSONFilterProc;
+ LAccept: Boolean;
+ LValue: TValue;
+ LJSONName: string;
+begin
+ LType := TRttiContext.Create.GetType(ARecord.TypeInfo);
+
+ LFilterProc := AFilterProc;
+ if not Assigned(LFilterProc) then
+ LFilterProc := GetRecordFilterProc(LType);
+
+ for LField in LType.GetFields do
+ begin
+ LAccept := True;
+ if Assigned(LFilterProc) then
+ LFilterProc(LField, ARecord, Self, LAccept);
+
+ if LAccept then
+ begin
+ LJSONName := LField.Name;
+ LField.HasAttribute(
+ procedure (AAttr: JSONNameAttribute)
+ begin
+ LJSONName := AAttr.Name;
+ end
+ );
+ if LJSONName <> '' then
+ begin
+ LValue := LField.GetValue(ARecord.GetReferenceToRawData);
+
+ {$ifdef Delphi10Tokyo_UP}
+ if LValue.IsType(False) and (not LValue.IsArray) then
+ {$else}
+ if LValue.IsType and (not LValue.IsArray) then
+ {$endif}
+ WriteTValue(LJSONName, LValue.AsType) //unboxing TValue from TValue
+ else
+ WriteTValue(LJSONName, LValue);
+ end;
+ end;
+ end;
+end;
+
+procedure TJSONObjectHelper.FromRecord(ARecord: T; const AFilterProc: TToJSONFilterProc = nil);
+begin
+ FromRecord(TValue.From(ARecord), AFilterProc);
+end;
+
+{$ifdef DelphiXE6_UP}
+function TJSONObjectHelper.ReadInt64Value(const AName: string;
+ const ADefault: Int64): Int64;
+var
+ LValue: TJSONNumber;
+begin
+ Result := ADefault;
+ if Assigned(Self) and TryGetValue(AName, LValue) then
+ Result := LValue.AsInt64;
+end;
+{$endif}
+
+function TJSONObjectHelper.ReadIntegerValue(const AName: string;
+ const ADefault: Integer): Integer;
+var
+ LValue: TJSONNumber;
+begin
+ Result := ADefault;
+ if Assigned(Self) and TryGetValue(AName, LValue) then
+ Result := LValue.AsInt;
+end;
+
+function TJSONObjectHelper.ReadStringValue(const AName,
+ ADefault: string): string;
+var
+ LPair: TJSONPair;
+begin
+ Result := ADefault;
+ if not Assigned(Self) then
+ Exit;
+
+{$ifdef DelphiXE6_UP}
+ LPair := GetPairByName(AName);
+{$else}
+ LPair := Get(AName);
+{$endif}
+ if Assigned(LPair) then
+ Result := LPair.JsonValue.Value;
+end;
+
+function TJSONObjectHelper.ReadUnixTimeValue(const AName: string;
+ const ADefault: TDateTime): TDateTime;
+var
+ LValue: Int64;
+begin
+ Result := ADefault;
+{$ifdef DelphiXE6_UP}
+ LValue := ReadInt64Value(AName);
+{$else}
+ LValue := ReadIntegerValue(AName);
+{$endif}
+ if LValue <> 0 then
+ Result := UnixToDateTime(LValue)
+end;
+
+function TJSONObjectHelper.ReadValue(const AName: string;
+ const ADesiredType: TRttiType; const ANameCaseSensitive: Boolean;
+ out AValue: TValue): Boolean;
+var
+ LValue: TJSONValue;
+ LName: string;
+begin
+ LName := AName;
+ if not ANameCaseSensitive then
+ LName := GetExactPairName(LName);
+
+ Result := TryGetValue(LName, LValue);
+ if Result then
+ AValue := TJSONValueToTValue(LValue, ADesiredType);
+end;
+
+function TJSONObjectHelper.ReadValue(const AName: string;
+ const ADefault: TValue; const ADesiredType: TRttiType;
+ const ANameCaseSensitive: Boolean): TValue;
+begin
+ Result := ADefault;
+ ReadValue(AName, ADesiredType, ANameCaseSensitive, Result);
+end;
+
+class function TJSONObjectHelper.RecordToJSON(const ARecord: TValue;
+ const AFilterProc: TToJSONFilterProc): TJSONObject;
+begin
+ Result := TJSONObject.Create;
+ try
+ Result.FromRecord(ARecord, AFilterProc);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+class function TJSONObjectHelper.RecordToJSON(ARecord: T;
+ const AFilterProc: TToJSONFilterProc): TJSONObject;
+begin
+ Result := TJSONObject.Create;
+ try
+ Result.FromRecord(ARecord, AFilterProc);
+ except
+ Result.Free;
+ raise;
+ end;
+end;
+
+class function TJSONObjectHelper.TJSONValueToTValue(
+ const AValue: TJSONValue; const ADesiredType: TRttiType): TValue;
+var
+ LArray: TValue;
+ LElementType: TRttiType;
+ LJSONArray: TJSONArray;
+ LJSONElement: TJSONValue;
+ LIndex: Integer;
+ LNewLength: NativeInt;
+begin
+{$ifdef Delphi10Berlin_UP}
+ if AValue is TJSONBool then // Boolean
+ Result := TJSONBool(AValue).AsBoolean
+{$else}
+ if (AValue is TJSONTrue) or (AValue is TJSONFalse) then
+ Result := AValue is TJSONTrue
+{$endif}
+// else if ADesiredType.Handle = TypeInfo(Variant) then
+// Result := TValue.
+ else if AValue is TJSONNumber then // Numbers (Integer and Float)
+ begin
+{$ifdef DelphiXE6_UP}
+ if ADesiredType.TypeKind in [tkInt64] then
+ Result := TJSONNumber(AValue).AsInt64
+ else
+{$endif}
+ if ADesiredType.TypeKind in [tkInteger] then
+ Result := TJSONNumber(AValue).AsInt
+ else
+ begin
+ if ADesiredType.Handle = TypeInfo(TValue) then
+ Result := GuessTValueFromString(AValue.ToString)
+ else
+ Result := TJSONNumber(AValue).AsDouble;
+ end;
+
+ end
+ else if AValue is TJSONString then
+ begin
+ if ADesiredType is TRttiEnumerationType then // enumerated types
+ Result := TValue.FromOrdinal(ADesiredType.Handle, GetEnumValue(ADesiredType.Handle, TJSONString(AValue).Value))
+ else if (ADesiredType.Handle = TypeInfo(TDateTime)) // dates
+ or (ADesiredType.Handle = TypeInfo(TDate))
+ or (ADesiredType.Handle = TypeInfo(TTime))
+ then
+ Result := JSONToDate(TJSONString(AValue).Value)
+ else
+ begin // strings
+ if (ADesiredType.Handle = TypeInfo(TValue)) or (ADesiredType.Handle = TypeInfo(Variant)) then
+ Result := GuessTValueFromString(TJSONString(AValue).Value)
+ else
+ Result := TJSONString(AValue).Value;
+ end;
+ end
+ else if AValue is TJSONNull then // null values
+ Result := TValue.Empty
+ else if AValue is TJSONObject then
+ Result := TJSONObject(AValue).ToRecord(ADesiredType)
+ else if (AValue is TJSONArray) then
+ begin
+ LJSONArray := TJSONArray(AValue);
+ if ADesiredType.IsArray(LElementType) then
+ begin
+ TValue.Make(nil, ADesiredType.Handle, LArray);
+ LNewLength := LJSONArray.Count;
+ SetArrayLength(LArray, ADesiredType, @LNewLength);
+ //------------------------
+ for LIndex := 0 to LJSONArray.Count-1 do
+ begin
+ LJSONElement := LJSONArray.Items[LIndex];
+ LArray.SetArrayElement(LIndex, TJSONValueToTValue(LJSONElement, LElementType));
+ end;
+ Result := LArray;
+ end;
+ end
+ else
+ raise Exception.CreateFmt('Unable to put JSON Value [%s] in TValue', [AValue.ClassName]);
+end;
+
+function TJSONObjectHelper.ToRecord(const ARecordType: TRttiType;
+ const AFilterProc: TToRecordFilterProc = nil): TValue;
+var
+ LField: TRttiField;
+ LValue: TValue;
+ LRecordInstance: Pointer;
+ LFilterProc: TToRecordFilterProc;
+ LAccept: Boolean;
+ LJSONName: string;
+ LAssignedValuesField: TRttiField;
+ LAssignedValues: TArray;
+
+ function GetRecordFilterProc: TToRecordFilterProc;
+ var
+ LMethod: TRttiMethod;
+ begin
+ Result := nil;
+ // looking for TMyRecord.ToRecordFilter(const AField: TRttiField; const AObj: TJSONObject): Boolean;
+
+ LMethod := ARecordType.FindMethodFunc('ToRecordFilter');
+ if Assigned(LMethod) then
+ Result :=
+ procedure (const AField: TRttiField; const ARecord: TValue; const AJSONObject: TJSONObject; var AAccept: Boolean)
+ begin
+ AAccept := LMethod.Invoke(ARecord, [AField, AJSONObject]).AsBoolean;
+ end;
+ end;
+
+begin
+ TValue.Make(nil, ARecordType.Handle, Result);
+ LRecordInstance := Result.GetReferenceToRawData;
+
+ LFilterProc := AFilterProc;
+ if not Assigned(LFilterProc) then
+ LFilterProc := GetRecordFilterProc();
+
+ LAssignedValuesField := ARecordType.GetField('_AssignedValues');
+ if Assigned(LAssignedValuesField)
+ and not LAssignedValuesField.FieldType.IsDynamicArrayOf
+ then
+ LAssignedValuesField := nil;
+ LAssignedValues := [];
+
+ for LField in ARecordType.GetFields do
+ begin
+ LAccept := True;
+ if Assigned(LFilterProc) then
+ LFilterProc(LField, Result, Self, LAccept);
+
+ if LAccept then
+ begin
+ LJSONName := LField.Name;
+ LField.HasAttribute(
+ procedure (AAttr: JSONNameAttribute)
+ begin
+ LJSONName := AAttr.Name;
+ end
+ );
+ if LJSONName <> '' then
+ begin
+ if ReadValue(LJSONName, LField.FieldType, True, LValue) then
+ begin
+ LField.SetValue(LRecordInstance, LValue);
+ LAssignedValues := LAssignedValues + [LField.Name];
+ end
+ else
+ LField.SetValue(LRecordInstance, TValue.Empty);
+ end;
+ end;
+ end;
+ if Assigned(LAssignedValuesField) then
+ LAssignedValuesField.SetValue(LRecordInstance, TValue.From>(LAssignedValues));
+end;
+
+function TJSONObjectHelper.ToRecord(const AFilterProc: TToRecordFilterProc = nil): T;
+begin
+ Result := ToRecord(TRttiContext.Create.GetType(TypeInfo(T)), AFilterProc).AsType;
+end;
+
+procedure TJSONObjectHelper.WriteArrayValue(const AName: string;
+ const AArray: TJSONArray);
+begin
+ AddPair(AName, AArray);
+end;
+
+procedure TJSONObjectHelper.WriteArrayValue(const AName: string;
+ const AArray: TArray);
+begin
+ WriteArrayValue(AName, TJSONArray.ArrayOfRecordToJSON(AArray));
+end;
+
+procedure TJSONObjectHelper.WriteBoolValue(const AName: string;
+ const AValue: Boolean);
+var
+ LDummy: TJSONValue;
+begin
+ if TryGetValue(AName, LDummy) then
+ RemovePair(AName);
+
+ AddPair(AName, BooleanToTJSON(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteDateTimeValue(const AName: string;
+ const AValue: TDateTime; const AInputIsUTC: Boolean);
+begin
+ WriteStringValue(AName, DateToJSON(AValue, AInputIsUTC));
+end;
+
+procedure TJSONObjectHelper.WriteDoubleValue(const AName: string;
+ const AValue: Double);
+var
+ LDummy: TJSONValue;
+begin
+ if TryGetValue(AName, LDummy) then
+ RemovePair(AName);
+
+ AddPair(AName, TJSONNumber.Create(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteInt64Value(const AName: string;
+ const AValue: Int64);
+var
+ LDummy: TJSONValue;
+begin
+ if TryGetValue(AName, LDummy) then
+ RemovePair(AName);
+
+ AddPair(AName, TJSONNumber.Create(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteIntegerValue(const AName: string;
+ const AValue: Integer);
+var
+ LDummy: TJSONValue;
+begin
+ if TryGetValue(AName, LDummy) then
+ RemovePair(AName);
+
+ AddPair(AName, TJSONNumber.Create(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteStringValue(const AName, AValue: string);
+var
+ LDummy: TJSONValue;
+begin
+ if TryGetValue(AName, LDummy) then
+ RemovePair(AName);
+
+ if AValue <> '' then
+ AddPair(AName, TJSONString.Create(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteTValue(const AName: string;
+ const AValue: TValue);
+begin
+ AddPair(AName, TValueToJSONValue(AValue));
+end;
+
+procedure TJSONObjectHelper.WriteUnixTimeValue(const AName: string;
+ const AValue: TDateTime);
+begin
+ WriteInt64Value(AName, DateTimeToUnix(AValue));
+end;
+
+{ JSONNameAttribute }
+
+constructor JSONNameAttribute.Create(const AName: string);
+begin
+ inherited Create;
+ FName := AName;
+end;
+
+end.
diff --git a/Source/MARS.Core.MediaType.pas b/Source/MARS.Core.MediaType.pas
index 233b037c..45bec2a4 100644
--- a/Source/MARS.Core.MediaType.pas
+++ b/Source/MARS.Core.MediaType.pas
@@ -70,6 +70,7 @@ TMediaType = class
const TEXT_XML = 'text/xml';
const TEXT_HTML = 'text/html';
const APPLICATION_XML = 'application/xml';
+ const APPLICATION_XML_FireDAC = 'application/xml-firedac';
const APPLICATION_JSON = 'application/json';
const APPLICATION_JSON_FireDAC = 'application/json-firedac';
const APPLICATION_XHTML_XML = 'application/xhtml+xml';
@@ -390,7 +391,7 @@ function TMediaTypeList.GetQualityFactor(const AMediaType: string): Double;
begin
Result := 0.0;
for LItem in Self do
- if LItem.ToString = AMediaType then
+ if (LItem.ToString = AMediaType) or (LItem.IsWildcard) then
begin
Result := LItem.QFactor;
Break;
@@ -402,14 +403,12 @@ class function TMediaTypeList.Intersect(const AList1: TArray;
var
LMediaType: string;
begin
- SetLength(Result, 0);
+ Result := [];
+
for LMediaType in AList1 do
begin
- if AList2.Contains(LMediaType) then
- begin
- SetLength(Result, Length(Result) + 1);
- Result[Length(Result) -1 ] := LMediaType;
- end;
+ if (LMediaType = TMediaType.WILDCARD) or AList2.Contains(LMediaType) then
+ Result := Result + [LMediaType];
end;
end;
diff --git a/Source/MARS.Core.MessageBodyReader.pas b/Source/MARS.Core.MessageBodyReader.pas
index 6f70e9a3..d6c2eff9 100644
--- a/Source/MARS.Core.MessageBodyReader.pas
+++ b/Source/MARS.Core.MessageBodyReader.pas
@@ -22,9 +22,7 @@ interface
;
type
- IMessageBodyReader = interface
- ['{C22068E1-3085-482D-9EAB-4829C7AE87C0}']
-
+ IMessageBodyReader = interface ['{C22068E1-3085-482D-9EAB-4829C7AE87C0}']
function ReadFrom(
{$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
const ADestination: TRttiObject; const AMediaType: TMediaType;
@@ -90,6 +88,19 @@ TMARSMessageBodyReaderRegistry = class
const AFFINITY_ZERO = 0;
end;
+ TMARSMessageBodyReader = class
+ private
+ protected
+ public
+ class function ReadWith(
+ {$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation): TValue; inline;
+ class function GetDesiredEncoding(const AActivation: IMARSActivation;
+ var AEncoding: TEncoding): Boolean;
+ end;
+
+
implementation
uses
@@ -364,4 +375,58 @@ procedure TMARSMessageBodyReaderRegistry.RegisterReader(
FRegistry.Add(LEntryInfo)
end;
+{ TMARSMessageBodyReader }
+
+class function TMARSMessageBodyReader.GetDesiredEncoding(
+ const AActivation: IMARSActivation; var AEncoding: TEncoding): Boolean;
+var
+ LEncoding: TEncoding;
+ LFound: Boolean;
+begin
+ if not Assigned(AActivation) then
+ begin
+ AEncoding := TEncoding.UTF8;
+ Result := False;
+ Exit;
+ end;
+
+ LFound := False;
+ // look for attribute on Method
+ if Assigned(AActivation.Method) and not AActivation.Method.HasAttribute(
+ procedure(AAttr: EncodingAttribute)
+ begin
+ LEncoding := AAttr.Encoding;
+ LFound := True;
+ end
+ ) then // if not found, fallback looking for attribute on Resource
+ begin
+ if Assigned(AActivation.Resource) then
+ AActivation.Resource.HasAttribute(
+ procedure(AAttr: EncodingAttribute)
+ begin
+ LEncoding := AAttr.Encoding;
+ LFound := True;
+ end
+ );
+ end;
+
+ Result := False;
+ if LFound then
+ begin
+ AEncoding := LEncoding;
+ Result := True;
+ end;
+end;
+
+class function TMARSMessageBodyReader.ReadWith(
+ {$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation): TValue;
+var
+ LMBReader: IMessageBodyReader;
+begin
+ LMBReader := T.Create;
+ Result := LMBReader.ReadFrom(AInputData, ADestination, AMediaType, AActivation);
+end;
+
end.
diff --git a/Source/MARS.Core.MessageBodyReaders.pas b/Source/MARS.Core.MessageBodyReaders.pas
index d35c27b2..673beee9 100644
--- a/Source/MARS.Core.MessageBodyReaders.pas
+++ b/Source/MARS.Core.MessageBodyReaders.pas
@@ -10,14 +10,12 @@
interface
uses
- Classes, SysUtils, Rtti
+ Classes, SysUtils, System.Rtti, System.TypInfo
- , MARS.Core.Attributes
- , MARS.Core.Activation.Interfaces
- , MARS.Core.Declarations
- , MARS.Core.MediaType
- , MARS.Core.MessageBodyReader
- ;
+, MARS.Core.Attributes, MARS.Core.Activation.Interfaces, MARS.Core.Declarations
+, MARS.Core.MediaType, MARS.Core.MessageBodyReader
+, MARS.Core.RequestAndResponse.Interfaces
+;
type
[Consumes(TMediaType.APPLICATION_JSON)]
@@ -58,6 +56,22 @@ TJSONValueReader = class(TInterfacedObject, IMessageBodyReader)
end;
+ [Consumes(TMediaType.APPLICATION_XML)]
+ TXMLReader = class(TInterfacedObject, IMessageBodyReader)
+ public
+ function ReadFrom(
+ {$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation
+ ): TValue; virtual;
+
+ class function ReadXML(
+ {$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation
+ ): TValue;
+ end;
+
[Consumes(TMediaType.APPLICATION_JSON)
, Consumes(TMediaType.APPLICATION_FORM_URLENCODED_TYPE)
, Consumes(TMediaType.MULTIPART_FORM_DATA)
@@ -129,11 +143,11 @@ TArrayOfTFormParamReader = class(TInterfacedObject, IMessageBodyReader)
implementation
uses
- StrUtils, NetEncoding, Web.HttpApp
- , MARS.Core.JSON
- , MARS.Core.Utils, MARS.Rtti.Utils
- {$ifdef DelphiXE7_UP}, System.JSON {$endif}
- ;
+ StrUtils, NetEncoding, Generics.Collections
+{$ifdef DelphiXE7_UP}, System.JSON {$endif}
+, Xml.XMLIntf, XMLDoc
+, MARS.Core.JSON, MARS.Core.Utils, MARS.Rtti.Utils
+;
{ TJSONValueReader }
@@ -205,7 +219,7 @@ function TRecordReader.ReadFrom(
): TValue;
var
LJSON: TJSONObject;
- LRequest: TWebRequest;
+ LRequest: IMARSRequest;
begin
Result := TValue.Empty;
@@ -214,7 +228,7 @@ function TRecordReader.ReadFrom(
then
begin
LRequest := AActivation.Request;
- Result := StringsToRecord(LRequest.ContentFields, ADestination.GetRttiType
+ Result := StringsToRecord(LRequest.GetFormParams, ADestination.GetRttiType
, procedure (const AName: string; const AField: TRttiField; var AValue: TValue)
begin
if AField.FieldType.Handle = TypeInfo(TFormParamFile) then
@@ -277,6 +291,7 @@ function TArrayOfObjectReader.ReadFrom(
LArray: TValue;
LArrayType: TRttiType;
LIndex: Integer;
+ LNewLength: NativeInt;
begin
Result := TValue.Empty;
LArrayType := ADestination.GetRttiType;
@@ -295,8 +310,9 @@ function TArrayOfObjectReader.ReadFrom(
if LJSONValue is TJSONArray then
begin
LJSONArray := TJSONArray(LJSONValue);
-
- SetArrayLength(LArray, LArrayType, LJSONArray.Count);
+ LNewLength := LJSONArray.Count;
+ SetArrayLength(LArray, LArrayType, @LNewLength);
+ //------------------------
for LIndex := 0 to LJSONArray.Count-1 do //AM Refactor using ForEach
begin
LJSONObject := LJSONArray.Items[LIndex] as TJSONObject;
@@ -312,7 +328,9 @@ function TArrayOfObjectReader.ReadFrom(
end
else if LJSONValue is TJSONObject then // a single obj, let's build an array of one element
begin
- SetArrayLength(LArray, LArrayType, 1);
+ LNewLength := 1;
+ SetArrayLength(LArray, LArrayType, @LNewLength);
+ //------------------------
LArray.SetArrayElement(
0
, TJSONObject.JSONToObject(
@@ -344,6 +362,7 @@ function TArrayOfRecordReader.ReadFrom(
LArray: TValue;
LArrayType: TRttiType;
LIndex: Integer;
+ LNewLength: NativeInt;
begin
Result := TValue.Empty;
LArrayType := ADestination.GetRttiType;
@@ -359,8 +378,9 @@ function TArrayOfRecordReader.ReadFrom(
if LJSONValue is TJSONArray then
begin
LJSONArray := TJSONArray(LJSONValue);
-
- SetArrayLength(LArray, LArrayType, LJSONArray.Count);
+ LNewLength := LJSONArray.Count;
+ SetArrayLength(LArray, LArrayType, @LNewLength);
+ //------------------------
for LIndex := 0 to LJSONArray.Count-1 do //AM Refactor using ForEach
begin
LJSONObject := LJSONArray.Items[LIndex] as TJSONObject;
@@ -370,7 +390,9 @@ function TArrayOfRecordReader.ReadFrom(
end
else if LJSONValue is TJSONObject then // a single obj, let's build an array of one element
begin
- SetArrayLength(LArray, LArrayType, 1);
+ LNewLength := 1;
+ SetArrayLength(LArray, LArrayType, @LNewLength);
+ //------------------------
LArray.SetArrayElement(0, TJSONObject(LJSONValue).ToRecord(LElementType));
end;
@@ -388,42 +410,24 @@ function TStringReader.ReadFrom(
const AActivation: IMARSActivation): TValue;
var
LType: TRttiType;
- LSL: TStringList;
- {$ifdef Delphi10Berlin_UP}
- LBytesStream: TBytesStream;
- {$endif}
+ LEncoding: TEncoding;
+ LText: string;
begin
Result := TValue.Empty;
LType := ADestination.GetRttiType;
{$ifdef Delphi10Berlin_UP}
- LBytesStream := TBytesStream.Create(AInputData);
- try
- LSL := TStringList.Create;
- try
- LSL.LoadFromStream(LBytesStream);
- if LType.IsDynamicArrayOf then
- Result := TValue.From>( LSL.ToStringArray )
- else if LType.Handle = TypeInfo(string) then
- Result := LSL.Text;
- finally
- LSL.Free;
- end;
- finally
- LBytesStream.Free;
- end;
+ if not TMARSMessageBodyReader.GetDesiredEncoding(AActivation, LEncoding) then
+ LEncoding := TEncoding.UTF8; // UTF8 by default
+ LText := LEncoding.GetString(AInputData);
{$else}
- LSL := TStringList.Create;
- try
- LSL.Text := string(AInputData);
- if LType.IsDynamicArrayOf then
- Result := TValue.From>( LSL.ToStringArray )
- else if LType.Handle = TypeInfo(string) then
- Result := LSL.Text;
- finally
- LSL.Free;
- end;
+ LText := string(AInputData);
{$endif}
+
+ if LType.IsDynamicArrayOf then
+ Result := TValue.From>( LText.Split([sLineBreak]) )
+ else if LType.Handle = TypeInfo(string) then
+ Result := LText;
end;
{ TFormParamReader }
@@ -465,7 +469,7 @@ function TArrayOfTFormParamReader.ReadFrom(
): TValue;
var
LResult: TArray;
- LRequest: TWebRequest;
+ LRequest: IMARSRequest;
LIndex: Integer;
begin
LResult := [];
@@ -476,10 +480,10 @@ function TArrayOfTFormParamReader.ReadFrom(
begin
LRequest := AActivation.Request;
- for LIndex := 0 to LRequest.ContentFields.Count - 1 do
- LResult := LResult + [TFormParam.CreateFromRequest(LRequest, LRequest.ContentFields.Names[LIndex])];
+ for LIndex := 0 to LRequest.GetFormParamCount - 1 do
+ LResult := LResult + [TFormParam.CreateFromRequest(LRequest, LRequest.GetFormParamName(LIndex))];
- for LIndex := 0 to LRequest.Files.Count - 1 do
+ for LIndex := 0 to LRequest.GetFilesCount - 1 do
LResult := LResult + [TFormParam.CreateFromRequest(LRequest, LIndex)];
end;
@@ -487,6 +491,45 @@ function TArrayOfTFormParamReader.ReadFrom(
end;
+{ TXMLReader }
+
+function TXMLReader.ReadFrom(
+{$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation): TValue;
+var
+ LXMLDoc: IXMLDocument;
+ LEncoding: TEncoding;
+begin
+ Result := TValue.Empty;
+
+ LEncoding := TEncoding.UTF8;
+
+ LXMLDoc := TXMLDocument.Create(nil);
+{$ifdef Delphi10Berlin_UP}
+ LXMLDoc.LoadFromXML(LEncoding.GetString(AInputData));
+{$else}
+ LXMLDoc.LoadFromXML(AInputData);
+{$endif}
+ Result := TValue.From(LXMLDoc);
+end;
+
+class function TXMLReader.ReadXML(
+{$ifdef Delphi10Berlin_UP}const AInputData: TBytes;{$else}const AInputData: AnsiString;{$endif}
+ const ADestination: TRttiObject; const AMediaType: TMediaType;
+ const AActivation: IMARSActivation): TValue;
+var
+ LXMLReader: TXMLReader;
+begin
+ LXMLReader := TXMLReader.Create;
+ try
+ Result := LXMLReader.ReadFrom(AInputData, ADestination, AMediaType, AActivation);
+ finally
+ LXMLReader.Free;
+ end;
+end;
+
+
procedure RegisterReaders;
begin
TMARSMessageBodyReaderRegistry.Instance.RegisterReader(
@@ -514,6 +557,7 @@ procedure RegisterReaders;
);
TMARSMessageBodyReaderRegistry.Instance.RegisterReader