# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

### Types of changes
- **Added** for new features.
- **Changed** for changes in existing functionality.
- **Deprecated** for soon-to-be removed features.
- **Removed** for now removed features.
- **Fixed** for any bug fixes.
- **Security** in case of vulnerabilities.

## [6.3] - 2022-05-09
- Fixed update LastChanged when object bring to version, to archive and unarchived
- Added remote hosting proxy mode for local UI
- Changed daily continuous job HBA report send

## [6.2] - 2022-03-30
- Fixed delay jitters and exponential backoff
- Revamped netlog when http proxy used
- Fixed envtag for edJoint slave run
- Added timeout for run in slave mode
- Added ApiKeyAlias detection by EnvTag
- Removed Host HTTP header when call to /backend on locasl REST
- Fixed version comparison in the AutoUpgrade code for Synology case
- Added exit code or signal parameter to DELETE /rest/process/{param}
- Fixed case insensitive wildcard extention matching on Win32
- Changed jobs status detection for CBA
- Fixed excessive delays while restarted syncRestore initial run
- Fixed excessive handlers for missing FS events case

## [6.1] - 2022-02-21
- Fixed download diagnostics.zip and collect files for diagnostics
## [6.0] - 2022-02-11
- Fixed message "Child finished with exit status {}"
- Disabled AWS SDK logging
- Fixed one file processing in the Backup Include Path
- Fixed fallback to internal S3 client on AWS SDK client is failed

## [5.0] - 2021-10-28
- Changed versioning style to <MAJOR>.<MINOR>[.yyyymmdd.<BRANCH>]
- Added environment tag for all packages
- Changed build rule names according to environment tags
- Changed: Partner packaging extracted to edNativePackages project
- Changed: Build fully migrated to LLVM
- Changed: Switched to C++20 mode
- Changed thread management for backup abd restore jobs
- Security: Optimized memory usage and long loops inside huge folders

## [4.4.13] - 2021-09-24
- Fixed too early switch to Monitoring state
- Fixed Include/Exclude paths pattern preparation
- Added logging child exit status to errlog
- Changed: Memory usage optimization

## [4.4.12] - 2021-09-17
- Fixed JS UI
- Fixed check number limit of ObjectReports in the job to ParallelTasks number
- Added exponential backoff delay to checkMaintenance() loop
- Fixed excessive backoff delays
- Changed daemon watchdog kill routines to make more informative logs
- Added json dump output format to cli ls
- Changed multipart upload only since 10MB

## [4.4.11] - 2021-07-28
- Fix crash on cloud folder rename
- Changed 'vetoed' word to 'automatically ignored' in messages
- Added ClientRestart ActionEvent handler
- Fix memory leak in stacktraces on Windows

## [4.4.10] - 2021-07-16
- Added Date and date-iso headers to all HTTP requests
- Changed S3 upload error handling
- Fix objects list appending in the Job report
- Changed: hard limited objects number in the Job report to 20
- Changed: increased heartbeat timeout up to 30min
- Changed: purge versions before uploads and after uploads

## [4.4.9] - 2021-06-22
- Changed test connection routines. Added attempts delay jitters and exponential backoff

## [4.4.8] - 2021-06-14
- Changed test connection routines

## [4.4.7] - 2021-06-11
- Fixed logo icons transparency
- Limited test connection frequency per second

## [4.4.6] - 2021-06-10
  
## [4.4.5] - 2021-06-07
- Fix diagnostics archiving

## [4.4.4] - 2021-05-27

## [4.4.3] - 2021-05-12
- Added build tag to Web UI version string

## [4.4.2] - 2021-05-11
- [Asustor] Fix ARMv7

## [4.4.1] - 2021-05-11

## [4.4.0] - 2021-04-20
- Enabled AWS SDK plugin for NASes
- Fixed and optimized local DB queries

## [4.3.2] - 2021-04-21


## [4.3.1] - 2021-04-20
- Fix version string

## [4.3.0] - 2021-04-16
- Fixed archives and versions removing by age
- Fixed restart on stuck
- Changed default socket timeout to 30 sec
- Changed upload mode to multipart for add files
- Changed: refined error handlers
- Changed: autoupgrade
- Changed: Allow include to backup entire drive on Windows
- Fixed wrong versions and archives purging
- Added optional multipart upload via AWS SDK plugin
- Changed intelligent jobs configuration reloading
- Added defaultBackups DeviceInfo parameter
- Changed file differentiation. Now last modify time should be strictly equal
- Fixed averageUploadSpeed in DeviceInformation
- Fixed autoupgrade

## [4.0.15] - 2021-02-24
- Fix archives and versions purge by age

## [4.0.14] - 2020-12-31
- Fix stop daemon when device removing in the account handling

## [4.0.13] - 2020-12-14

## [4.0.12] - 2020-12-08

## [4.0.11] - 2020-11-24

## [4.0.10] - 2020-11-21

## [4.0.9] - 2020-11-18

## [4.0.8] - 2020-11-17
- Added Upgrade publisher
- Fix common build script

## [4.0.7] - 2020-10-29

## [4.0.6] - 2020-10-22

## [4.0.3] - 2020-10-08

## [4.0.2] - 2020-10-07
- Changed: more informative error messages for ignored files
- Fixed debug mode flag
- Fixed exclude path processing

## [4.0.1] - 2020-07-28
- Fixed exclusion rules without wildcards
- Changed DB handling on logout
- Added PrepareDownload file status
- Fix deleted file status in the reports
- Changed multipart upload for all cases
- Fixed Fix App writes log with TRACE level but should INFO
- Added DatabaseInitTime field to Misc table
- Fixed OSX hostname

## [4.0.0] - 2020-06-22
- Added versions support in cli commands
- Finised migraton from SOAP to REST
- Upgraded fmtlib up to 6.0.0
- Changed JSON formatted messages for webhandler
- Changed service error reporting improvements
- Changed log files sending support
- Changed optimized time of backup scan/index
- Added rsync like wildcards support in include/exclude path
- Fixed backupconfiguration and deviceconfiguration conflict resolving
- Security upgrade CA certs
- Changed replaced all mutex to recursive_mutex
- Added $Downloads expansion in the restore target path
- Added TecDrive users namespace support
- Added ability write service backend and user namespace directly in login
- Fixed job statuses
- Added local REST /backend proxy
- Fixed OSX Unicode NFD in filenames
- Changed: Save only first and last part of netlog
- Changed: using hmacsession for autologin
- Added cleanup local DB when host removed
- Fixed Ubuntu systemd config

## [3.8.7] - 2019-03-25
- Fix watchdog

## [3.8.6] - 2019-03-12
- Changed autologin token format to HMAC style
- FSRoot feature added

- Kill orphaned processes on daemon start
- Added handling wrong client time
- [Asustor] removed package model
- [Asustor] Add #Recycle folder to veto list
- Added MACs and Setting to DeviceInfo
- Fix restore start ISSUE #1527
- Immediate version purge after file uploaded in the case versions number == 0
- Removed status file by default
- Fix sync behavior

## [3.8.5] - 2018-10-18
- Fix excessive 'Empty username' on login in web UI
- Added device information collecting for many partners

## [3.8.4] - 2018-10-17
- Fix logout delay in web UI

## [3.8.3] - 2018-10-16
- Fix issue with device id int64 to uint32 erroneous conversions
- Fix deviceId in local DB

## [3.8.2] - 2018-10-05

## [3.8.1] - 2018-09-26

## [3.8.0] - 2018-09-20
- c++14 sources
- Upgraded OSX cross toolchain
- Upgraded Fmtlib up to 5.0.0
- Upgraded SQLite up to 3.23.1
- Added cli interface
- Backup scan optimization
- Added throttling by network bandwidth percentage

## [3.6.10] - 2018-08-07
- Fix Sync objects local DB re-population

## [3.6.9] - 2018-08-27
- Fix multi-part upload Etag verification
- [Asustor] Added 40xx ARM64 support

## [3.6.8] - 2018-07-18
- Fix send current activity report

## [3.6.7] - 2018-07-17

## [3.6.6] - 2018-06-22
- [Asustor] Added 63xx/64xx support

## [3.6.5] - 2018-05-23
- Fix DNS resolver

## [3.6.4] - 2018-05-16
- Direct call to public DNS service as fallback resolve
- Fix threads management

## [3.6.3] - 2018-05-15
- Fix FSmonitor exceptions

## [3.6.2] - 2018-05-03
- Added nslookup command call as fallback resolver 

## [3.6.1] - 2018-04-29
- Added gethostbyname() fallback resolver 

## [3.6.0] - 2018-04-17
- DNS resovle fixes
- Memory usage optimization
- Added handling On-Demand accounts
- Point-in-Time restore fixes
- Enabled backtrace collector

## [3.4.4] - 2018-01-29
- Added UseCompression configuration option

## [3.4.3] - 2018-01-25
- Added restarter for hard troubleshooting
- Fix web UI look
- Fix web UI signup

## [3.4.2] - 2018-01-15
- Fix web UI and UI access authorization refactoring
- [Asustor] UI access authorization

## [3.4.1] - 2017-12-28
- Fix cleanup temporary files
- Fix pause upload mode for active uploads

## [3.4.0] - 2017-12-22
### Added
- Added 'Pause on demand' support for edJoint
### Fixed
- Fix renew multipart upload
- Fix Jobs status
### Changed
- Automatically enable TRACE log level when enable FSLogEvents or NetLog
- Fix versions naming when download without overwrite: filename.ext(1) -> filename(1).ext
- Changelog migrated to new format recommend on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

## [3.2.2] - 2017-12-13
### Fixed
- Fix atomic linkage for some ARCHs
### Changed

## [3.2.0] - 2017-11-24
### Added
### Fixed
- Fix throttle scheduler
- Fix browser cache issue for index.html
### Changed
- Log rotation instead of truncation for edJoint

## [3.1.1] - 2017-11-14
### Added
### Fixed

## [3.1.0] - 2017-11-09
### Added
- netlog rotation
- Proxy server support
### Changed
- C++11 compatible compiler required
- Renew multipart upload after restart and token expiration
- Stream based file processing
- 7zip SDK replaced by XZ liblzma
- Parallel upload on filesystem events
- Fully re-implemented throttling routines
- Encryption switched to AES for all platforms

## [3.0.39] - 2017-06-09
- Fix restore report counters

## [3.0.38] - 2017-06-06

## [3.0.37] - 2017-05-15
- Fix regex handling

## [3.0.36] - 2017-03-29
- Fix SOAP routines

## [3.0.35] - 2017-03-27

## [3.0.34] - 2017-03-08
- Added Netlog size limit 256kB

## [3.0.33] - 2017-02-07
- Fix report counters
- Refined file operation error messages
- Unlimited core dump size when enabled core dumping
- Added FSGenericWatcher parameter to allow do not use kqueue

## [3.0.32] - 2017-02-06
- Increased max inotify watches up to 1000000
- Refined file operation error messages

## [3.0.31] - 2017-02-02
- Fixed mktime() tzdata issue

## [3.0.30] - 2017-01-24

## [3.0.29] - 2016-11-29

## [3.0.28] - 2016-11-18
- Fix remove archived folders

## [3.0.27] - 2016-10-21
- [Asustor] Fixes

## [3.0.26] - 2016-10-06
- [Asustor] Added support
- Upgrade Root CA certificates

## [3.0.25] - 2016-09-01

## [3.0.24] - 2016-07-12
- Removed file uploads to ED servers

## [3.0.23] - 2016-06-29
- Changed versioning logic. Version number taken into account when check for delete versions by age
- Upgrage calls changes

## [3.0.22] - 2016-06-08

## [3.0.21] - 2016-06-06
- Fixed ceil() bug on armv7

## [3.0.20] - 2016-05-20
- Generic Linux installer fix

## [3.0.19] - 2016-04-29

## [3.0.18] - 2016-03-24
- SQLite upgraded up to 3.9.2 and switched to static linkage for all targets
- Added generic Linux installer
- SQL query fixes
- Fixed cloud object creation time

## [3.0.17]
- License text updated

## [3.0.17]
- Fixed large file support on 32x ARCH

## [3.0.17]
- Limited progress in reports 99% max

## [3.0.14] - 2015-12-10
- Upgraded CA certificates

## [3.0.14]
- Fix QAP-1167 Backed up sub-folder doesn't deletes on cloud 
- Restore reports fixes
- Fixed RapidJSON assert handler

## [3.0.12] - 2015-11-21
- Configure socket timeout option
- Fix QAP-1099
- Added debug symbols in separated file elephantdrive.gdb and Dumpable option
- Fix QAP-1152 [Multipart] Low network connection speed rate leads time difference error
- Fix QAP-1156 edNative - Wrong backup behaviour for Included folders consist as part of each other
- Fix QAP-1159 Data not restore if excluded folders is established
- Fix stuck on termination
- Upgraded gSOAP up to 2.8.25
- Memory usage optimization

## [3.0.11] - 2015-11-08
- Increased PHP UI authentication timeout up to 300 sec
- SQLite fix QAP-1141, QAP-1142
- Downgrade fix QAP-1140
- Proper clean tmp files on auto-upgrade filed

## [3.0.11]
- Fix QAP-1102 Disk I/O error crash

## [3.0.9] - 2015-10-28
- Improved local IP detection
- Improved log messages
- Fix QAP-1101, QAP-1095, QAP-1043, QAP-1106
- Watchdog timeout increased to 1.5 hours
- Crash fix

## [3.0.8] - 2015-10-21
- Added symbolic link /var/log/elephantdrive.log to log file
- QAP-1064 RestoreTask crash while long restore

## [3.0.7]
- Refined big files upload error handling
- DEDN-308 For multi-part upload files, increased retry limit to 10 and do not fail over to "upload to ED service" mode

## [3.0.6]
- Generic PHP UI fix
- Refined big files upload connection error handling

## [3.0.5] - 2015-10-06
- HTML UI fixes

## [3.0.4]

## [3.0.3]
- SetPutStatus() send proper hash for multipart upload
- Fixes big files upload (variable overflow)
- Fixed WatchDog false positive on hashing big files
- Fixed backup configuration reload when uploading

## [3.0.2]
- Fixes big files upload
- HTTP "Expect: 100-Continue" support

## [3.0.1]
- Fixes big files upload

## [3.0] - 2015-09-15
- merged elephantdrive and elephantdriveDaemon to one elephantdrive binary. Start mode should be selected.
- all executables now linked with shared libs and required libs should be present or distributed
- Daemon can be started in background process mode and handle PID file
- Daemon redirect all stderr and stdout output of backup process to /var/log/elephantdrive.errlog file
- Inotify replaced to EFWS
- Reload server configuration and other events, which required restart on older versions, without restart
- Added sync feature
- local DB moved to VarDir. DB file name is <user_email>.db
- removed version file except RNV
- partial support decryption with user key based on plain password (only if plain password saved in config)
- support 'no encryption' upload and download mode
- CMAKE generate ninja-build script instead Makefile
- partially generalized PHP scripts
- internal HTTP for test cases
- Fixed S3 key time expiration when big file restore
- Added support quoting config parameters
- Multipart S3 upload for big files
- Basic Windows support
- Basic OSX support
- Changes for one service IP endpoint. Enabled svc server authentication
- Incremental backup performance optimization

## [2.9.25]
- Show server name in log
- Upgraded gSOAP up to 2.8.22

## [2.9.24]
- seLinux compatible shared OpenSSL library build

## [2.9.24]
- Does not auto-append just deleted tasks for smb shares

## [2.9.22]
- Throttling fixes
- Fixed internal PHP special chars escaping

## [2.9.21]
- Auto appending newly added SMB shares as backup tasks

## [2.9.20]
- Raised max password length in PHP UI to 256 symbols

## [2.9.19]
- fixed throttling by schedule

## [2.9.18]
- UnitTest fixes
- Filesystem monitoring QAP-346 fix

## [2.9.17]

## [2.9.16]
- updated root SSL certificates

## [2.9.15]
- handled decompression error

## [2.9.14]
- Fix QAP-313 Unable login through web form

## [2.9.13]

## [2.9.12]
- fixed multiple start one task

## [2.9.11]
- Refined log messages
- Fixed QAP-27 (Compression 100M txt file leads incorrect uploading)

## [2.9.10]
- Fixed renew routines for gSOAP proxy

## [2.9.9]
- Disabled SSL12 support in Boost.ASIO
- Fixed CreateHost excessive call
- Toolchain for netgear-arm switched to ARM7

## [2.9.8]
- Fixed Inotify issue for x86_64
- Fixed S3 key time expiration when big file restore

## [2.9.7]
- Inotify delay to wait finish changes increased to 1 sec
- Handled compression error (e.g. MAX compressed file size limit reached)

## [2.9.6]
- Decreased socket timeouts to 60 sec and added connection timeout
- Disabled SSL12 support

## [2.9.3]
- Watchdog thread
- Enabled GNU routines for gSOAP
- Fixed values in reports

## [2.9.2]
- fixed handling deletion of superfolder on server side

## [2.9.1]

## [2.9.0]
- Mandatory show PATCH in version

## [2.8.4]
- Added purging of files with control chars in path (DEDN-118)

## [2.8.3]

## [2.8.2]
- Fix DNS resolve issue on some devices
- DNHB-409 (There isn't Forgot password function in console's login page) and DNHB-410 (Incorrect error message when user logs in with cancelled account.)

## [2.8.1]
- Workaround DNS resolve issue on some devices
- Removed date from release versions and added patch number

## [2.8]
- Refactoring. Implemented InjectPtr and IOCModule concept
- Parallel uploading and downloading routines
- Review routines to work with local DB
- Review real time related routines
- Review task reporting routines

## [2.7]
- Fixed Valgrind memory errors
- Implemented direct S3 transfer without CURL routines
- Fixed OpenSSL verification in gSOAP routines

## [2.6]
- Daemon: Added forwarding for all new styled start args 
- Daemon: Fixed backuper binary searching routines in case of location in $PATH
- DefaultJobDir param renamed to DefaultJobDirs. Now it can be list
- Added DefaultJobDirsEnabled param. Flag enable or disable all backup jobs from DefaultJobDirs when created. Yes by default
- Fixed help output for width 80 terminals
- Fixes exceptions when config path not existence

## [2.5] - 2014-03-27
- Fixed working of restore task
- meta and svc services are merged
- Added configuration file changes monitoring
- Partially log messages review
- Many memory bugs are fixes

## [2.4]
- Replaced settings reader and processor implementation. Changed set of configuration parameters.

## [2.3]
- Replaced logger implementation. Reviewed a lot of log messages
- Added Boost routines usage
- Added unit testing modules

## [2.2.20140204]
- Switched to new version numeration system: <MAJOR>.<MINOR>.<DATE><OPTIONAL SUFFIX>
- Added Synology partner support

## [2.2.0.20]
- Util.cpp, ElephantDriveMain.cpp - For partner=freenas, changes to list shares from smb.conf file on FreeNAS and to create default jobs with the share "alias" name.
- Util.cpp - Log output expanded milliseconds and fixed excess break line
- Explorer.cpp - bugfix DNHB-131
- TaskUtil.cpp, Explorer.cpp, Explorer.h, EFSObject.h, trunksInterface.h, S3Interface.cpp, S3Rest.cpp, S3Rest.h, TrunksInterface.h, TrunksInterface.cpp - Integrate S3 direct S3Transfer Code DNHB-132
- Added support FreeBSD 9.2 and FreeNAS

## [2.2.0.17] - 2013-08-28
- Explorer.cpp - Fixes to handle UTC offset for restoring objects (utime related)
- Explorer.cpp - set LastModifiedTimeUtc in WorkingObjects 
- Explorer.cpp - Added method to return MAX_FILE_SIZE
- BackupTask.cpp - Do not count files > MAX_FILE_SIZE

## [2.2.0.16]
- Explorer.cpp - change in buildBasicPhraseDown. Don't return until you get a good basicPhrase
- Explorer.cpp - Added checks to make sure basicPhraseUp and basicPhraseDown are not empty strings
- RestoreTask.cpp - Don't count archived files in index() if user did not ask for "restoreArchived"
- RestoreTask.cpp - Add code to set mtime and atime of downloaded folder to original folder's times. 
- RestoreTask.cpp - Retain lastmodified time for folders when files are downloading within.
- ElephantDriveMain.cpp - Set default throttling to disabled

## [2.2.0.15]
- RestoreTask.cpp - Added retries to call to getObjectPayload() to retry in case of download failures
- Explorer.cpp - Add code in getObjectPayload() to set mtime and atime of downloaded file to original file's times

## [2.2.0.14] - 2013-08-09
- BackupTask.cpp - Call to getSubType so that each Explorer knows what MAX_FILE_SIZE is
- BackupTask.cpp,Indexer.cpp, TaskUtil.cpp - re-introduce hidden files

## [2.2.0.13]
- No change

## [2.2.0.12]
- BackupTask.cpp - Backed out makeTrunkFolder() calls to create empty folders
- SharedData.cpp, DatabaseInterface.cpp - Added check to make sure gHostID matches with cached gHostID

## [2.2.0.11]
- Make Indexer and BackupTask consistent in which files they ignore
  Do not ignore hidden files (.*). Let's have website not show them

## [2.2.0.10]
- Change in BackupSet.matchHour() to handle daylight savings time

## [2.2.0.9]
- Added OpenSSL callbacks for locking to make calls to openssl thread-safe
- Fixed job scheduling so that start time is local time
- Maximum file size for a user is now set by getSubType() according to the user's subscription type

## [2.2.0.8]
- Crypto code - in case of errors, return NULL instead of 0

## [2.2.0.7]

## [2.2.0.6] - 2013-07-29
- Hard-capping uploads: Enabled getCurrentUsage() and getSubType() - Explorer.cpp, BackupDaemon.cpp
- Restore Task: "Copy" file if move/rename fails + better messaging for restore errors - RestoreTask.cpp
