2008-12:
- Added type "ALL" to CallList to retrieve complete list of calls at once.
- Moved callType from CallList to CallEntry. 
- Implemented in-library msn filtering and reverse-lookups.
- Renamed various methods in FonbookManager from *Fonbuch* to *Fonbook*.
- Made CallList a singleton.
- Replaced string tokenizer in Listener.
- Refactored MSN-filter functionality.
- Added "-fPIC" to Makefiles.
- A call to Config::SetupFonbookIDs now deletes a previously instantiated FonbookManager
  to allow multiple calls to SetupFonbookIDs in case of configuration changes.
- Introduced new method CallList::DeleteCallList() to explicitly delete the singleton instance.
- Made Listener a singleton. A call to Listener::CreateListener() is used to activate this feature.
- Introduced new method CallList::CreateCallList() to explicitly pre-fetch the call list before
  calling CallList::getCallList().
- Moved Config::SetupFonbookIDs to FonbookManager::CreateFonbookManager().
- Renamed Tools::GetPhoneSettings() to Tools::GetLocationSettings().
- Added resolving of SIP[0-9] to real provider names.
- removed the port defines and replaced them by two new fields in class Config to allow easier unit testing
- default LKZ to 49 (Germany) if an error occurs

2009-02:
- added exception catch in Tools::GetLang() and Tools::Login()

2009-03:
- Removed the default of countryCode = "49" if Tools::GetLocationSettings() fails. This task is 
  handed over to the caller, see next.
- Added new parameters to Config::Setup() to give default values for countryCode and regionCode.
  The default parameters are used, when auto-detection in Tools::GetLocationSettings() fails. The
  new parameter locationSettingsDetected indicates whether auto-detection was successful. In this
  case, the given default values are overwritten to give the caller access to the new values.

2009-04:
- Fixed naming of local phonebook. The recommended name is now localphonebook.csv, the old name 
  localfonbuch.csv is still accepted. The directory remains $vdrconfigdir/plugins/fritzbox/.
  
2009-05:
- Updated OertlichesFonbook to new website layout
- Fixed naming of local phonebook. The plugin now really looks for a file called 
  localphonebook.csv.
  
2009-06:
- Provided Interface to add entries to phone books. By default, existing implementations do not 
  support this feature.
- Implemented adding of entries in local phone book.  

2009-08:
- Implemented new login method for Fritz!Box firmware >= xx.04.74 using SIDs. This needs 
  features from openssl library. For compiling, libssl-dev (or similar) is needed.
- Adapted to new tcpclient++
- Fixed a warning warn_unused_result in LocalFonbook.cpp
- Fixed wrong HTTP-GET header in Nummerzoeker.cpp
- Fixed detection of login failure in Tools::Login()
- Improved cleanup when deleting Listener, FritzFonbook, CallList
- Delay destructor of FritzFonbook and CallList to wait for running threads to end
- Improved concurrent access to Fritz!Box using Tools::GetFritzBoxMutex()

2009-09:
- Improved detection of login type (SID or PASSWORD), which is now done only once
- Improved Tools::Login() to avoid unneccessary logins
- Created FritzClient to act as an facade to the FB which uses tcpclient::HttpClient.
  FritzClient handles all communication to the FB including login. The consumer just 
  uses one of the following methods to get information from the FB
  * RequestCallList()
  * RequestLocationSettings()
  * RequestSipSettings()
  * RequestFonbook()
  This class uses a mutex to automatically serialize multiple instances of itself. The lock 
  is aquired at creation and released at destruction of the class instance. Removed mutex
  in Tools.
- Login() and GetLang() moved as private methods to FritzClient
- Code cleanup and introduction of RETRY_* macros for easy retry handling when 
  communicating with the FB
- Fixed entity decoding in FritzFonbook.cpp
- Added sort routines in CallList and Fonbook

2009-11:
- Adapted to changes in tcpclient++
  * fixed TcpClient to throw correct exceptions on connect. This fixes detection 
    of disabled call monitor, the corresponding hint "dial #96*5*" is now shown in 
    syslog again
- Improved matching of phone numbers: Fritz!Box control codes *xxx# are now ignored.
- Added missing include <cstring> in FritzClient.cpp

2009-12:
- Fixed retry delay calculation in case of connection refused

2010-01:
- Fixed a possible segfault when sorting calllists and fonbooks
- Added Config::SetupPorts() to provide non-standard ports
- Fixed some warnings about ununsed parameters in base-classes and empty implementations
- Removed useless check in CallList::RetrieveEntry()
- FritzClient::Login() now returns a bool wether login was successful
- FritzClient::hasValidPassword() can now be used to determine the result of the last Login()
- Tools::GetLocationSettings() now returns a bool wether the password used 
  to access the FB was valid
- Fixed two bugs in sorting call lists by date / time
- Improved destructor of Listener to allow proper cleanup of thread
- Added CallList::LastCall()
- removed FonbookEntry::getTypeName() as this is something the consumer has to take care about

2010-02:
- introduced I18N_NOOP macro, this allows application that use libfritz++ to identify strings 
  delivered by the library (e.g., using xgettext) they should localize
- fixed sorting issue in calllist by putting remoteNumber / "unknown" into the remoteName field
- "unknown" call list entries are now always sorted to beginning of the list
- addes a missing redefinition of GetTechId() in class FonbookManager
- modified logging to handle full path filenames cause by cmake in __FILE__.
  Provided new logging macros DBG, INF, ERR
- Removed dependency to OpenSSL due to licensing issues, 
  using copy of MD5 implementation from GNU coreutils 5.93
- Removed md5.[h,c] in favor of libgcrypt, libfritz++ now needs libgcrypt's 
  development header "gcrypt.h" to compile
- Added a missing call to Login() in FritzClient::InitCall()
- Do not initiate a call if no number is given in FritzClient::InitCall()
- Fixed LOCATOR macro to support cmake and make
- Implemented FritzClient::getCurrentIP and FritzClient::reconnectISP
- Fixed bug in FritzClient::reconnectISP
- added config option for setting the UPNP port
- now parsing the Fritz Box's phone book via xml export file (if available)
- phone book entries now have the additional fields "quickdial", "vanity", 
  "priority", "important"
- Fixed decoding of entities in xml phone book parser

2010-03:
- Modified FonbookEntry class: one FonbookEntry now holds all numbers of a 
  person 
  * Changed construction of FonbookEntrys accordingly
  * Changed interface of Fonbook::ResolveToName
  * Adapted FritzFonbook's parser
  * Adapted LocalFonbook's parser
  * Adapted ResolveToName in NummerzoekerFonbook and OertlichesFonbook
- Adapted local phonebook to use the same xml format, new FB versions use.
  Existing csv phone books are converted to xml automagically, entries 
  with TYPE_NONE are converted to TYPE_HOME
- FritzFonbook is now writeable, if FB xml import is available 
  (firmware >= xx.04.76 needed)
- Added various set methods to FonbookEntry

2010-07:
- Updated OertlichesFonbook to website changes
- Added XmlFonbook.cpp to Makefile
- Fixed resolving of calls from unknown caller
- Code cleanup in Listener, OertlichesFonbook and Nummerzoeker
- Added tel.local.ch phonebook

2010-08:
- Added missing initialization of libgcrypt

2010-11:
- Sensitive Information like passwords, phone numbers, etc. are no longer 
  logged by default. Logging this information can be enabled via Config::Setup()
- Fixed parser in Tools::GetSipSettings()
- Fixed serializing XML phone books in XmlFonbook::SerializeToXml()
  -> this fixes uploading an xml phone book to the FB 
- Include TelLocalChFonbook.cpp in CMakeLists.txt
- Moved from libpthread++ to libccgnu2

2010-12:
- First steps in migrating to socket implementation of common c++
- Splitted Config::Setup into Config::Setup and Config::Init
- Fix reverse lookup in OertlichesFonbook
- Add missing include to XmlFonbook

2011-01:
- Add Config::Shutdown() to gracefully shutdown the library
  This can be used for re-inits as well as on program exit
- Improve checks when parsing result list in OertlichesFonbook
  Check that at most one result is returned
- Fix parser of OertlichesFonbook again
  Looking for the onclick=... as a last attribute does not always work
  New method looks for the first element containing the onclick attribute
  and then moves to the end of the element
- Keep current call list as long as possible on reload
  Current call list is now cleared after the new call list
  has been parsed (Fixes #514)
- Fix XmlFonbook parser
  XmlFonbook Parser was not aware of empty <number /> tags
- Fix retry delay calculation in Listener
- Fix FonbookManager if no phone book is configured at all
- Add several consts to Fonbook, FonbookEntry and Reverse Lookup Fonbooks
- Add copy constructor to FonbookEntry
- Add Fonbook::ChangeFonbookEntry, Fonbook::SetDefaultType
- Add methods for adding and deleting fonbook entries
  Fonbook::AddFonbookEntry and ::DeleteFonbookEntry
- Make Fonbook::fonbookList private, add a Clear() method to erase it
- Only write phone books back if changes are pending
- Fixed setInitialized in LocalFonbook
- Added HttpClient to libfritz++ to replace remaining functionality of libtcpclient++
- Adapted Makefile / CMakeLists.txt to add HttpClient
- Adapted FritzClient's get and post calls
- Adapted CallList, because new implementation doesn't return the header lines
- Imported some files from libcommoncpp to fix issues
  * remove newline after HTTP POST data
    An unnecessary \r\n was added to data in HTTP POST requests,
    with certain webservers this causes errors
  * boundary spelling error
    In MIME multipart requests, boundary is spelled boundry
  * HTTP POST multipart
    consider form data in content length, send from data together with HTTP header
  * Extend MIMEFormData
    support for filename and content-type is added
  * SOAPStream
    Flexibilize URLStream with regard to content type in http posts
    Add SOAPStream class
- Improve HttpClient to use default HTTP port
- Migrate reverse lookup phone books to use new HttpClient
- Provide PostMIME method in HttpClient
- Make Fonbook::GetFonbookSize() more robust
  If not initialized, always return 0 and not the current intermediate state
- Fix missing initialization in CallList

2011-02:
- Extend Fonbook::AddFonbookEntry() to allow arbitrary position for new entry
- Fix initialization of LocalFonbook
  Add setInitialized(true) in case of no local phonebook file exists


2011-03:
- Add parsing of sipMsns
- Fix logging into Fritz!Box without password
- Fix krazy issues
- Remove translatable string 'unknown'
- Fix catching exceptions in FritzClient
- Fix compile error with libcommoncpp2 / IPv6
- Add some debug output regarding threading
- Remove unnecessary calls to exit() at end of threads
- Initialization speedup
- Add mutex to access syslog

2011-04:
- Add new parameter 'saveOnShutdown' to CreateFonbookManager()
- Add Fonbook::isModified()
- Add missing FonbookManager::Save() to forward calls to Fonbook::Save()

2011-06:
- Adapt to more flexible Fritz!Box phone books

2011-07:
- Fix resolve in OertlichesFonbook
- Add MatchesRemoteNumber to CallEntry
- Fix fonbook ResolveToName
- Get rid of TYPES_COUNT in FonbookEntry

2012-03:
- Fix resolve in OertlichesFonbook
- Add missing const in Fonbook / FonbookManager
- Fix compiler warnings -Wsign-compare and -Wswitch
- Improve constructor Fonbook() to ask for title, techid, writeable
  * Removes direct access to these members
  * Adds setWriteable() if a fonbook is determined to be writeable later
- Add LookupFonbook class
  * Lookup-only foonbooks now inherit this class
  * Simplifies OertlichesFonbook, Nummerzoeker, TelLocalChFonbook significantly
  * Caches lookups in memory
  * Add successful field to sResolveResult
  * Removed const qualifier from Fonbook::ResolveToName
- Add constructor to sResolveResult
  * Adapt users of sResolveResult
- Reorganized some includes
- Provide Doxyfile
- Add missing documentation in Fonbook class

2012-04:
- Fix resolve in OertlichesFonbook
- Fix a possible deadlock in Tools::GetSipSettings()
- Move convertEntities from XmlFonbook up to Fonbook and improved it
- Fix resolve in TelLocalChFonbook

2012-12:
- Implement new login scheme using login_sid.lua for FB firmware >= xx.05.50
- Adapt sip settings, location settings, call list and phone book requests
  to new uris and format
- Hide msn in syslog if logPersonalInfo is disabled
- Fixes login problems with old fw-versions that return 404 on login_sid.lua
  https://bugs.kde.org/show_bug.cgi?id=312204
- Fix encoding conversion when requesting call list
- Further fixes to allow access to older FB firmwares
  https://bugs.kde.org/show_bug.cgi?id=312204

