Changes
=======
v3.1.37.1
- Support REQUEST_ACK message type (PR #237)
- Fix typo in error message (PR #238)
- Fix for bug #239, as one process use two stubs for different vlans (PR #247, Issues #223 #239 #241)
- Fix multicast timeout crash on Windows caused by bad use of reinterpret_cast (PR #272)
- Update configuration paths to reside on vendor partition (PR #274)
- Retry failed netlink operations (PR #283)
- Fixed android build error (PR #288)
- Fix for configuration option deserialize bug (PR #300, Issue #263)
- Accept return codes within range 0x20-0x5E as valid (PR #312)
- Add support for broadcast (PR #314)
- Fix for TC8 test case SOMEIPSRV_RPC_07 and SOMEIPSRV_SD_BEHAVIOR_03 (PR #316, Issue #315)
- Support boost 1.76 (PR #318)
- Fix big endian support in byteorder.hpp (PR #320)
- Use Reference to Prevent Copying (PR #356)
- Add CI using github actions (PR #140)

v3.1.37
- Added dependency from network tests to e2e library (plugin).
- Avoid services becoming available when the daemon is suspended
- Handling with some udp errors in send_cbk process,
    restarting the connection.

v3.1.36
- Fix for ELVIS-339712: Fix handling of subscription objects
   during unsubscribe.

v3.1.35
- Reworked fix for ELVIS-3310053
- Improve checking for matching responses.
    - When sending a response, vSomeIP only checked for a request with
      the corresponding combination of client and session identifiers.
    - This led to the possibility, that a response was sent for the
      wrong service and/or method because of matching client and session
      identifiers.
    - This commit implements a full check of service, method, client and
      session identifiers to ensure a response fits to the received
      request.
- Rework to get rid of clang-tidy (llvm14) warnings.
- Facilitate manual execution of (some) subscription tests.
    - Switch log level from "debug" to "warning" to facilitate the selection
      of the script name that must be executed on client side.
- Do not send initial events for rejected subscriptions.

v3.1.34
- Use default ports if an acceptance configuration does not specify any.
- Prevent StopSubscribe/Subscribe on first offer reception.
- Ignore routing state settings to the current state.
- Explicitely clean subscriptions if a service removal is reported.
- Use SOL_RECBUFFORCE instead of SOL_RECVBUF.
  
v3.1.33
- Corrected flag initialization to avoid wait time when re-establishing
  connections.

v3.1.32
- Fix bug which could lead to deleting requested services of routing
  manager.
- Add Jenkins pipeline.
- Fix race condition which could lead to false positive security
  warnings.
- Fix handling of remote subscriptions for unoffered services: Fix bug
  which could lead to erroneously not accepting remote subscriptions
  after a service was stop being offered and offered again.

v3.1.31
- Fix race condition which could lead to not establishing a TCP
  connection to a remote service

v3.1.30
- Fixed lock order inversion
- Fixed UDP socket bind error handling

v3.1.29
- Do not send re-subscriptions on suspend

v3.1.28
- Fixed race condition in client endpoint send queue
- Improved robustness when receiving malformed remote subscriptions
- Cleanup remote subscribers on suspend

v3.1.27
- Performance improvement: Added service partitioning:
  Each configured partition will lead to a separate client port being used
  to connect to a remote server port
- Improve handling of expired subscriptions
- Fixed race condition when starting "last message received" - timer.

v3.1.26
- Improve handling of expired subscriptions

v3.1.25
- Fix event payload caching at proxy

v3.1.24
- Fix for initial events

v3.1.23
- Fixed crash in TCP client endpoint
- Fixed TCP socket bind error handling

v3.1.22
- Fixed joining multicast group for udp server endpoints

v3.1.21
- Fixed missing DLT logs if DLT was enabled in config in parallel with file or console logging.
- Avoid heap-buffer-overflow in look_ahead() when deserializing SD entry / option type.
- Restart UDP client endpoint on connection refused error.
- Select a free client port that was not used recently.
- Limit the number of possible remote subscribers from same remote IP address
  to an eventgroup provided by a service/instance if the remote
  subscriber uses different ports for its subscriptions.

v3.1.20.3
- Correct detection payload changes (Issue #164)

v3.1.20.2
- Removed special way of detecting boost within NDK (PR #187)
- Allow events/eventgroups to be specified in arbitrary order (Issue #68)
- Allow port 65536 to be used (Issue #80)
- Support IPv6 (Issue #162, PR #179)
- Fix handling of local service history (Issue #163)
- Fix referencing of placeholder events (Issue #175)
- Corrected handling of debounced requests when releasing (Issue #181)
- Fixed possible race when disconnecting (Issue #182)
- Align order of acknowledgement and value sending (Issue #183)

v3.1.20.1
- CMakeLists.txt fixes
  (by Martin Haase)
- Mark all services unavailable when the routing manager goes down
  (by Philip Werner & dannyrhubarb)

v3.1.20
- SomeIP/TP optimization
- Fix for expired subscriptions

v3.1.19
- Log statistics for high frequent received remote events
- Avoid unintended deletion of all service instances in release_service()
- Prevent deletion of server endpoint on SubscribeEventGroupACK with multicast endpoint
- Do not lock the multicast mutex twice

v3.1.18
- Support boost 1.74
- Ignore remote offers without referenced endpoint options
- Fixed race condition when removing security policies
- Ensure composite send operations have finished before resetting TCP server endpoint

v3.1.17
- Support AutoSAR E2E Profile 4
- Support dynamic policies for offered services
- Fixed race condition between service shutdown and subscription
- Fixed race condition between service instances offered on the
  same endpoint(s).

v3.1.16.1
- Restore IPv6 within UDP server endpoint
- AOSP build adaptation to vsomeip3 libraries

v3.1.16
- Fixed race condition when leaving multicast group
- Do not busy loop when receiving garbage data on local endpoint

v3.1.15
- Ensure to remove the correct subscription object on unsubscribe
- Implemented support to define "secure services"
- Speedup security policy handling
- Enable building with boost v1.73.0

v3.1.14.1
- Merged extended support for static routing (versioning)
  (by Jean-Patrice Laude jean-patrice.laude@renault.com)
- Merged simplification of build process for hello_world example
  (by Nikolay Khilyuk nkh@ua.fm)
- Updated Android.bp to use boost 1.70 or higher
- Merged Android support for hello_world example 
  (by Nikolay Khilyuk nkh@ua.fm)
- Align response sample to documentation (do not specify application name)
  (by JayHou houjie@lixiang.com)
- Call dlerror before calling dlsym to clear previous error
  (by Oleg Kharitonov Oleg.Kharitonov@elektrobit.com)
- Get base path from environment variable for Android NDK
  (by Nikolay Khilyuk nkh@ua.fm)
- Fixed wrong library naming
  (by Nikolay Khilyuk nkh@ua.fm)
  
v3.1.14
- Fixed race conditions (application registration, subscription)

v3.1.13
- Abort operation when doing a full rejoin
- Protect access when consuming a policy
- Decrease wait time for composite send operations 
- Reimplemented logger without using boost::log

v3.1.12
- Ensure composite send operations have finished before resetting an endpoint.
  Otherwise this may cause a crash within boost.asio.
- Always use the assigned client identifier when sending messages from a proxy.
- Add TTL to initial timestamp to avoid immediate expiration.

v3.1.11
- Preparation for new IPsec plugin (3.1.1)

v3.1.10
- Reset subscriptions on stop offer service
- Protect access to security policy contents
- Tolerate wrong/incomplete event registrations in compatibility mode
- Avoid buffering of pending subscriptions

v3.1.9
- Fix race condition when processing multicast messages

v3.1.8
- Fix deadlock when sending messages
- Fix race condition when processing SD messages

v3.1.7
- Fix stop subscribes when a service is released
- Improve handling of time stamps when processing subscriptions
- Log queued data instead of socket fill levels
- Ensure all shutdown steps are executed (even in case of exceptions)

v3.1.6
- Fix possible busy loop when expiring subscriptions
- Use set of serializers to avoid deadlock situation
- Improve client identifier handling 
    - Check whether corresponding socket is available
    - Implement retry if a client identifier cannot be used
- Log buffer fill levels if they exceed a configurable threshold (default=67%). 

v3.1.5
- Ensure subscriptions to remote services are correctly reset when
  services are no longer available.
- Fix race condition when inserting new subscriptions.
- Fix accessing of security module during library shutdown.

v3.1.4
- Ensure to only mark remote services offered via UDP and TCP as
  available when both endpoints are marked as connected to prevent TCP
  connection restarting by the service discovery.
- Fix possible deadlock when expiring a remote subscription and
  sending the corresponding event at the same time.
- Fix nullptr access in service discovery when receiving a
  subscription for an unknown eventgroup.
- Add new cmake variables DEFAULT_CONFIGURATION_FOLDER and
  DEFAULT_CONFIGURATION_FILE which can be used to change the default
  configuration folder and file at compile time (see vsomeipUserGuide
  for more information)
- Fix race condition leading to not accepting service offers from
  a local client when the same service was offered and stop offered in
  a high frequency

v3.1.3
- Set client ID to 0x0 for SOME/IP SD messages

v3.1.2
- Fix bug in vSomeIP 2 compatibility layer which lead to offering
  selective events as normal events in conjunction with
  CommonAPI-SomeIP mainloop integration when a proxy was build to a
  stub through the same CommonAPI connection ID in the same binary.

v3.1.1
- Ensure sending StopOffers for services specified with a different
  protocol than someip in the configuration.
- Add support for boost v1.70 and v1.71.

v3.1.0
- Integrate changes of 2.14.12 - 2.14.18
- Add get_uid and get_gid methods to message class
- Add reliability parameter to application::offer_event and
  application::request_event methods
- Add vSomeIP 2 compatibility layer.
- Fix crash when expiring a reliable-only subscription
- Fix Android compile errors
- Fix bug in service discovery offer acceptance handling which led to
  only checking the first service entry of an incoming SD message via
  the registered handler.
- Deactivate adherence to NPDU debounce time between SOME/IP-TP
  segments of the same message.
- Fix less than operator of remote_info_t which lead to
  application::get_sd_acceptance_required() always returning a map
  with only one erroneous element
- Fix SD startup on Windows
- Fix heap-use-after-free in server endpoints

v3.0.0
- Cleanup of application interface
    - Removed (un)register_subscription_error_handler methods. The
      functionality is now offered through the
      (un)register_subscription_status_handler methods.
    - All methods concerning events/fields now use a new event_type_e
      enum to specify the event type.
    - The subscription_type_e parameter was removed from the subscribe
      method. The way the remote service is offered now determines the
      subscription type.
    - The offer_acceptance* methods were renamed to sd_acceptance*.
    - The flush parameter was removed from the send method
    - Removed notify and notify_one methods which used the flush
      parameter.
- Added SOME/IP-TP functionality. Please see the vsomeipUserGuide for
  more information.
- Added nPDU functionality. Please see the vsomeipUserGuide for more
  information
- E2E protection is now implemented as plugin
- Added Android support
- Internal improvements and bugfixes

v2.14.18
- Fix bug leading to not sending out FindService entries after a
  resume from Suspend-to-RAM, if the service was already known at the
  time of the request.

v2.14.17
- Performance improvements for request-service message handling

v2.14.16
- Ensure restarting of TCP connection if TCP reset is received
  before 3 way handshake is finished

v2.14.15
- Ensure that all clients receive the security policy update

v2.14.14
- Improved handling for EMFILE error (per-process limit of open
  filedescriptors reached)
- Fixed client ID assignment

v2.14.13
- Fixed race condition leading to unintended sending
  of selective broadcasts.

v2.14.12
- Make timeout during application shutdown configurable via
  "shutdown_timeout" json configuration file parameter
- Fix bug leading to too fast reassignment of client IDs acquired via
  auto-configuration in conjunction with usage of a non-continuous
  diagnosis mask

v2.14.11
- Fixed race condition when opening shared memory
- Fixed race condition when inserting SubscribeEventGroupACK
  entries
- Added prefix for security related log messages

v2.14.10
- Fixed race condition in client ID to UID mapping.

v2.14.9
- Fixed race condition in event / response validation
  and client ID to UID mapping removal
- Limit reconnect attempts of local client endpoints
- Increase robustness of local server endpoint
  in case of corrupted data stream

v2.14.8
- Handle ANY_METHOD for security policy updates

v2.14.7
- Reverted security related feature if same client connects
  again with different credentials.

v2.14.6
- Fixed issue related to client ID reuse if security is activated
- Use chmod instead of umask to ensure correct permissions of unix
  domain sockets

v2.14.5
- Fixed race condition when handling security policy updates

v2.14.4
- Added whitelist feature for security policy update / removal
- Added / improved security related checks

v2.14.3
- Prevent concurrent access to any client policies
- Updated ACL plugin interface

v2.14.2
- Fix possible deadlock when receiving invalid responses from remote
  TCP services
- Enabled loading of UID GID specific security configuration during
  application startup

v2.14.1
- Check header fields in udp endpoints for correct values
- Fixed race condition in event::notify methods
- Ensure to always resume sending if endpoints were restarted
- Prevent possible concurrent access to receive buffer in endpoints
- Allow or deny all remote clients via security config parameter
- Adapt security config plugin to updated ACL interface
- Make receive buffer size configurable for UDP client and
  server endpoints via "udp-receive-buffer-size" parameter
  in json configuration file
- Fix race condition which could lead to premature resubscription if a
  remote service was stop offered and offered again

v2.14.0
- Introduce security policy updates during runtime and extend
  security configuration to filter on instance ID and method ID level
  For more information see the vsomeipUserGuide.
- Make IPsec plugin more robust against libdavici communication loss

v2.13.2
- Make I/O thread nice level configurable

v2.13.1
- Improve check of subnet mask for remote subscribers
- Restart TCP connections if too big messages are received
- Don't process subscriptions if IPsec connection isn't established
- Additionally check protocol header fields in tcp endpoints as well
- Fix race when expiring remote services

v2.13.0
- Update debug_diagnosis_plugin and add update_service_configuration
  method to public application interface. This enables offering of
  service instances on the network which are only offered locally by
  default. The changes done through the new method are not persistent
  over reboots.
- Fix handling of requests send to the service discovery port
- Log time since routing state was set to RS_RESUMED in cyclic version
  logger
- Blame externally offered services if routing state is set to
  RS_SUSPENDED
- Prevent possible exception during application shutdown

v2.12.4
- Improve handling of reboot detection in IPsec plugin if the
  same ipsec connection is still used after reboot.

v2.12.3
- Improve handling of broken TCP streams

v2.12.2
- Expire remote subscriptions to local services when routing state is set to
  suspending

v2.12.1
- Fixed race condition in event registration

v2.12.0
- Improve error handling and STR behaviour of IPsec plugin.
- Improve magic cookie handling.
- Fix possible deadlock on application shutdown
- Fix handling of local StopOffers when duplicate service instances
  are present in the network.
- Make trace connector json configuration more flexible
- Fix bug in security configuration when black listing single
  UIDs/GIDs

v2.11.2
- Ensure service availability if IPSec plugin is activated but IPsec
  not configured correctly.

v2.11.1
- Improve handling of slow remote ECUs in IPsec plugin
- Fix possible deadlock on application shutdown

v2.11.0
- Added IPsec plugin.
  The compilation of the plugin has to be explicitly enabled when calling cmake.
  Example: cmake -DPLUGIN_IPSEC_BUILD=1 ..

v2.10.22
- Handle EPERM error (Operation not permitted) in cei::send_cbk
- Restart TCP endpoint if a maximum number of aborted restarts
  (due to state == CONNECTING) is reached or if a maximum allowed time since
  the connection attempt was started has elapsed
- Fixed missing call of subscription status handlers
  for external fields if a following subscription
  was done triggered by a service being stopped/expired
- Fixed crash in vsomeip security credential check
- Added Debian hardening compiler flags (requires GCC >= 5.2)
- Fixed compilation with GCC 8

v2.10.21
- Improve memory usage of routing manager.
- Improve handling of incoming SD messages with uncommon entry
  combinations.
- Name all threads under Linux and log thread IDs during startup.
- Optimize memory allocation for internal message handling.
- Ensure an (extra) dispatch thread is running in case the main
  dispatch thread is (still) blocked.
- Fix race condition which could lead to missing initial events for
  local subscriptions if the application hosting the service called
  application::offer_event and additionally application::request_event
  for the same event.
- Fixed crash

v2.10.20
- Add security config (i.e. vsomeip_security.json) to mandatory config files
- Enable local_routing_test_starter.sh to use externally defined configuration
  files
- Reject malformed subscriptions with SubscribeEventgroupNACK if multiple
  endpoint options are referenced
- Use CMake define or environment variable to find gtest
- Quit vsomeipd when Service Discovery is configured but module cannot be loaded
- Added error message when Configuration module cannot be loaded
- Export payload_impl to enable compilation with newer GCC versions
- Avoid printing the same warning twice. Ensure all error paths are identifiable
- Fixed security checks for policies without configured client ID
- Fixed crash on auto config load in case of EOWNERDEAD caused by previous crashed/exited application

v2.10.19
- Catch exceptions on shutdown (especially from boost::log)
- Fixed handling of malformed packets in TCP client endpoint in conjunction 
  with magic cookies

v2.10.18
- Fix restarting of TCP connection on connection reset by the server
  and mark services reachable through it as unavailable until
  connection is established again.
- Fix bug which prevented restarting of TCP connections if the peer
  instantly send a RST after the connection had been established.
- Fix bug which could cause missing initial events in conjunction with
  service discovery messages containing new subscriptions and
  resubscriptions.

v2.10.17
- Speedup initial subscriptions to unreliable remote services
- Fix deadlock in conjunction with configured client ports
- Fix bug leading to usage of client port outside of configured range

v2.10.16
- Added changes for diagnosis mode plugin (as in v2.10.14)
- Only map shared memory for client IDs once per process

v2.10.15
- Reverted diagnosis mode plugin (as in v2.10.11)
- Fix remote event caching

v2.10.14
- Added changes for diagnosis mode plugin.
- Bugfix for pending subscriptions when same port is used
  for TCP and UDP endpoint option.

v2.10.13
- Reverted diagnosis mode plugin

v2.10.12
- Fix exception handling for boost logger
- Update diagnosis mode plugin

v2.10.11
- Fix client ID handling for remote selective subscriptions
- Add handling for EDESTADDRREQ in endpoints

v2.10.10
- Fix concurrency issue leading to a crash

v2.10.9
- Improve handling of service discovery messages with entries
  referencing too many options.
- Prevent sending of duplicate remote subscriptions to local clients
  if the local client processes incoming subscriptions too slow.
- Remote (un)subscriptions to the same eventgroup are now queued in
  the routing manager until the local client has processed the
  previous (un)subscription for this eventgroup.
- Introduce new json configuration parameter 'diagnosis_mask' to
  control the number of bits in the client ID used for the diagnosis
  address. This can be used to enable more than 254 concurrent clients
  on a node. For more information see the vsomeipUserGuide.
- If the service discovery is enabled it is is only started if a
  matching multicast route for the configured service discovery
  multicast group is present in the system. This applies only to
  Linux.
- Rework security configuration:
    - Allow policy specifications without client specification.
    - Allow policies to be specified for ranges of uids/gids.
  For more information see the vsomeipUserGuide.

v2.10.8
- Change dispatching of availability states in case an availability
  handler of a service instance is blocked in user code: Availability
  states of a service instance are now never dispatched parallel. The
  next availability state for a service instance is only dispatched
  after the blocked availability handler returned from user code. If
  the availability of the service instance changes in the meantime,
  subsequent incoming messages of the service instance are queued
  until the availability change was reported to the user code.
- Subscriptions to remotely offered services are now always done based
  on the protocol(s) the remote service is offered with. The
  subscription_type parameter of the application::subscribe method is
  ignored.
- Added wildcard support ("any") for the uid and gid json parameters
  in the security configuration.
- Fix possible deadlock on application shutdown

v2.10.7
- Fix potential deadlock when expiring remote subscriptions
- Rework restarting of tcp client endpoints to prevent heap corruption
  under high load situations

v2.10.6
- Fix concurrency issue leading to a crash when asynchronous
  subscription handlers were used.
- Improved packing of subscriptions sent out as answer to incoming
  offer service messages.

v2.10.5
- Fix possible deadlock on application shutdown
- Try to reestablish TCP connection on resubscription if the remote
  closed the connection
- Introduce new configuration file parameters to control
  interpretation of TTL field of incoming remote offers and
  subscriptions:
  - service-discovery > ttl_factor_offers (optional array of
    service/instance/TTL factor tuples)
  - service-discovery > ttl_factor_subscriptions (optional array of
    service/instance/TTL factor tuples)
- Added possibility to debounce external events/fields
  based on time or change of data in the payload (maskable) via new
  configuration file parameter:
  - debounce (optional array)
  For more information see the vsomeipUserGuide.
- Added possibility to limit amount of memory used to cache outgoing
  messages on IP port basis or globally via configuration file
  parameter:
  - endpoint-queue-limits (array): to limit on IP:Port (endpoint)
    level
  - endpoint-queue-limit-external: to generally limit all external
    endpoints.
  - endpoint-queue-limit-local: to limit queue sizes for local
    communication
  For more information see the vsomeipUserGuide.


v2.10.4
- Extended diagnosis plugin to handle requests for
  "disableRxAndEnableTx" and "disableRxAndTx".
- Catch unhandled user code exceptions thrown from called handlers.
- Don't send SubscribeEventGroupNACK for pending subscriptions on next
  offer to reduce the amount of StopSubscribe/Subscribe messages.
- Added possibility to apply filter for client side logging
  using VSOMEIP_CLIENTSIDELOGGING environment variable.

v2.10.3
- Interpret all incoming TTLs five times longer in service discovery
  to prevent inadvertent expiration of remote offers during high load
  situations.

v2.10.2
- Fix deadlock in routing manager when processing subscription
  acknowledgment from a local client if the corresponding service
  instance was stopped in the meanwhile.
- Introduce status_log_interval and memory_log_interval json file
  parameters which can be used to cyclically log memory consumption
  and/or internal status of the routing manager in a given interval
- Add Debug Diagnosis Job plug-in
- Support definition of multiple client port ranges in configuration

v2.10.1
- Fix possible memory corruption in routing manager on TCP connection
  reset

v2.10.0
- Add register_async_subscription_handler to application interface
- Ensure faster stopping of UDP and TCP endpoints
- StopSubscribe eventgroup entries of StopSubscribe/Subscribe
  eventgroup entry sequences in incoming SD messages are now
  completely handled in the service discovery module

v2.9.5
- Change magic cookie behaviour to only send a magic cookie every 10
  seconds instead of in front of every SOME/IP message
- Fixed bug which prevented resubscription after resuming from
  suspended state

v2.9.4
- Fixed deadlock on suspend to RAM / resume, triggered
  by signal handler.

v2.9.3
- Fixed race condition on application shutdown
- Fixed bug that application object was not destroyed
- Enabled client side logging of received messages
  to DLT if environment variable VSOMEIP_CLIENTSIDELOGGING
  is set to empty string or another arbitrary value.
- Ensure that the correct source port is used for sending events

v2.9.2
- fix handling of received response messages for unknown
  clients.
- Ensure that all external services are marked as offline when
  routing_state is set to RS_SUSPENDED
- Ensure to start sending out FindService messages for requested
  services after resuming.
- Ensure that the service info is also deleted if no unreliable
  communication happened before the service TTL has expired.

v2.9.1
- Don't ignore service requests for UDP-only remote services done
  before corresponding OfferService message was received.
- Ensure that main dispatcher thread waits until newly started
  dispatcher threads are finished with their call into the user code
  before starting to dispatch again after a blocking call occurred.

v2.9.0
- Added get_offered_services_async method to application interface to
  read the currently offered services
- Added set_watchdog_handler method to application interface which can
  be used to register a handler invoked in a given interval.
- Optimize processing time of incoming service discovery messages
- Events are now sent based on their configuration in the json file
- If a remote service is offered reliable and unreliable subscriptions
  are now done always with both endpoint options.
- Incoming subscriptions are now not acknowledged if not all events of
  the eventgroup can be served with the given endpoint options.

v2.8.1
- Support negative filter in trace connector

v2.8.0
- Change behaviour of register_subscription_status_handler method of
  the application interface: Registered handlers will only be called
  if the subscription was accepted by the remote side.
- Add 2nd register_subscription_status_handler method to application
  interface with additional flag to enable calling of the registered
  handler if the subscription is rejected by the remote side.

v.2.7.3
- Fix deadlock when stopping client endpoints to remote services
- Fix deadlock during construction of Subscribe Eventgroup entries

v.2.7.2
- Avoid deadlock when printing error message about too large messages

v2.7.1
- Prevent processing of too short messages received via UDP
- Avoid catching SIGABRT in vsomeipd
- Prevent duplicate logging of remote messages
- Log message cleanup/enhancement

v2.7.0
- Add possibility to register a subscription status handler via
  application interface. The handler will be called if a subscription
  is acknowledged / not acknowledged by the application hosting the
  target service instance of the subscription
- The default subscription type of application::subscribe method was
  changed from RELIABLE_AND_UNRELIABLE to PREFER_RELIABLE to harmonize
  initial event behaviour
- Add generic plug-in concept
- Fix bug which caused sending out subscription messages containing
  endpoint options with port set to zero
- Make magic cookie detection TCP connection based
- Avoid sending unneeded SIGKILLs to current routing manager
- Forward service's instance IDs to DLT
- Fixed performance loss on "client ID" lookup needed for ingoing
  remote subscriptions
- Add signal handling for starting stopping the service discovery to
  vsomeipd
- The message object can now be asked for CRC check state:
  is_valid_crc()
- Incoming remote responses where the CRC check fails will trigger:
  set_is_valid_crc(false)

v2.6.4
- Fix bug in reboot detection of other nodes
- Improve restarting of TCP connections

v2.6.3
- Improve reboot detection of other nodes
- Introduce 'max-payload-size-reliable' json file parameter which can be used to
  globally limit the maximum allowed payload size for TCP communication
- Added CRC checksum calculation for bit optimized messages

v2.6.2
- Service-Disovery performance improvements
- Made Routing Manager restartable
- Fixed file handle leak caused by remote ECU reboot
- Activate TCP-Keep-Alive for TCP endpoints
- Debouncing of request-service messages (routing info performance)
- Fixed false session-id handling of identification request

v2.6.1
- Fixed clearing of subscribers on stop offer service

v2.6.0
- Fixed races and crashes
- Fixed repetition phase timings for find service messages
- Reworked internal event/field distribution to reduce CPU load
- Reworked internal routing info distribution leading to fewer and smaller
  messages and lower CPU load
- Extend public application interface with second unsubscribe method with
  additional event parameter

v2.5.3
- Fixed races and crashes
- The minor version of a service instance is considered again when reporting the
  service instance's availability (this was removed with v2.4.2). If the minor
  version should not be considered use ANY_MINOR or DEFAULT_MINOR when
  registering availability handlers.
- Fixed initial events on unsubscription
- Improved dispatcher handling for blocking calls
- Crashed applications are now automatically unsubscribed

v2.5.2
- Fixed deadlock and crashes
- Prevent race of initial attributes
- Allow incomplete application configurations
- Unit test timeouts increased to avoid failures on (slow) build servers

v2.5.1
- Removed payload size limit. By default messages with an arbitrary length can
  now be sent locally and via TCP. The payload-sizes configuration file array is
  now used to limit the payload size for the specified endpoints instead of
  increasing it. There are two new configuration file parameters:
  - max-payload-size-local: limit maximum allowed payload size for node internal
    communication.
  - buffer-shrink-threshold: variable to control buffer memory deallocation
    after big messages have been processed. For more information see the
    vsomeipUserGuide.
- Fixed cleanup of endpoints for subscriptions using an exclusive proxy
  (selective) which unnecessarily increased the number of open file descriptors.
- Fixed assignment of predefined application IDs via autoconfiguration.
- Decouple start of routing manager from network availability.
- Made number of internal threads per application configurable.
- Postpone notify_one events sent from subscription handler to ensure correct
  message order on receiver side.

v2.5.0
- Added notify-/notify_one-methods to enable flush control for notifications.
- Restructured configuration to be a separate module (preparation to enable
  the usage of compiled configurations to speed-up startup)
- Added vSomeIP-Security: Socket authentication based on Linux-credentials
  together with further security checks using configurable policies.
- Fixed pending subscriptions had not sent out if subscribing application
  hosts the routing manager.
- Fixed crash in vsomeipd due to concurrent access when closing/shutdown socket.
- The service discovery now debounces newly offered service instances to avoid
  sending out the offers of the same service instance with a too high frequency.
  The default debounce time is set to 500ms. It can be changed via the new json
  file parameter service-discovery/offer_debounce_time.

v2.4.3
- Fix receiving of UDP frames containing multiple SOME/IP messages via UDP from
  external service instances

v2.4.2
- TCP connections for services no longer requested aren't reestablished anymore
- The minor version of a service instance is no longer considered when reporting
  the service instance's availability
- Introduce new internal_services json file parameter to define the internal
  service instances. This parameter can be used to control the sending behaviour
  for find service entries
- Fixed event processing if service and client shared the same application
- Incoming find service entries with unicast flag set to 0 are now replied with
  a unicast offer service message instead of a multicast offer service message.
- application::stop() now blocks until the shutdown has finished completely

v2.4.1
- Extended number of endpoints that can be referenced from entries array in
  service discovery messages
- Remove DLT contexts on application shutdown
- Avoid initialization of vsomeip-applications if the maximum number of
  applications (client identifiers) has been reached
- Prevent sending of OfferService entry as a reply to FindService message for
  internal services
- Fixed deregistration of vsomeip-applications that became unresponsive
- Fixed loop in endpoints causing high load during shutdown of vsomeip
  applications
- Fixed loop in endpoints causing temporary high load if other devices become
  unavailable without deregistering

v2.4.0
- Disabled tracing SOME/IP-SD messages by default. Set "tracing/sd_enable"
  switch to "true" to enable it.
- Trace notification events once instead of per target.

v2.3.5
- Fix TTL in Subscribe Eventgroup Entries

v2.3.4
- Exhaust client id range before reuse
- Provide public interface to ask for available instances

v2.3.3
- Added -q/--quiet switch to the daemon to allow it to be started without
  DLT logging
- Fix event caching in routing manager

v2.3.2
- Fix client deregistration during the client registration
- Fix handling of pending commands during registration

v2.3.1
- Fix shutdown crashes (logger & application shutdown)
- Fix race condition in client identifier configuration
- Fix vsomeipd crash
- Fixed handling of notifications (compliance)

v2.3.0
- Extend the API to force field notifications
- Implemented cyclic updated for events/fields
- Implemented epsilon updates (the used can provide a function to decide
  whether or not a value update shall be considered as a change)
- Fixed lifecycle: Wait acknowledge of de/register application
- Periodically log version information
- Avoid (shadow) event registrations for services only offered locally
- Fixed determination of routing manager host in case auto-configuration
  fails
- Removed initial flag from internal message format
- Fixed calling of registered message handlers for cases where wildcards
  were used during registration.
- Fixed availability reporting of reliable (TCP) remote services offered
  on the same port

v2.2.4
- Set default log level to DEBUG
- Improved segmentation of service discovery messages
- Fixed a race condition during subscriptions

v2.2.3
- Ensure service discovery messages to not exceed maximum packet size

v2.2.2
- Ensure multicast messages are sent by the network adapter that is configured
  to be used for unicasts instead of relying on the configured routes

v2.2.1
- Backward compatibility fixes 
  
v2.2.0
- Implemented Peer-to-Peer data exchange for notifications
- Fixed handling of minor version during service discovery
- Made initialization of application objects reentrant
- Routing manager proxies now reconnect to the routing manager if the
  connection got lost
- Auto-configuration supports multiple (different) configuration files
- The opening of TCP connections is no longer done without an explicit request
- Request No Respose messages are no longer answered in case of errors
- Notifications over IP were fixed

v2.1.2
- Ensure correct message order

v2.1.1
- Ensure SD FindService-messages are sent after client re-registration
- Corrected configuration of MagicCookies
- Make client ports configurable
- Implemented FindService message optimization
- Extended configuration consistency checks

v2.1.0
- Avoid duplicate notifications if a selective event is in more than one
  eventgroup
- Ensure SD messages are sent from the SD port
- Ignore SD messages with wrong message identifier
- Accept unreliable subscription for eventgroups without configured multicast
  address
- Reject subscriptions that contain invalid IP address or port
- Reject subscriptions for TCP if the connection is not established
- Exclude vsomeip_ctrl from default installation
- Only accept SD messages from SD port
- Acknowledge multiple subscriptions sent within the same message with a single
  message
- Allow to specify an application specific DLT application
- Ensure correct ordering of availability notifications
- Automatically expire subscription based on the given TTL
- Do not include internal services in SD offer messages
- Consider all fields of SD subscribe messages
- Made the watchdog configurable
- Support destination address resolution on Windows (for reboot detection)
- Support auto-configuration (client identifiers, routing manager) on Windows

v2.0.6
- Diagnosis address can be configured at runtime

v2.0.5
- Fixed reboot detection behavior

v2.0.4
- Service Discovery now used configured Client ID prefixes (=DIAGNOSIS_ADDRESS)
- Reworked reboot detection (now based on the destination address)
- Aligned default TTL setting (was 5 in vsomeip and 0xFFFFFF in vsomeip-sd, now
  its constently 0xFFFFFF)

v2.0.3
- Fixed shutdown and application re-registering

v2.0.2
- Fixed endpoint flushing
- Improved handling of Selective Broadcasts (CommonAPI)
- Trace connector was added
- Added reboot detection
- Reworked handling of TCP connections
- Support multiple multicast eventgroups per service
- Improved handling of multicasts
- Extended Service Discovery to send FindMessage messages for unknown services
- Support multiple SOME/IP messages in a single UDP datagram

v2.0.1
- Ensure Unicast flag is set in all Service Discovery messages
- Allow "local" as alias for unicast address in Magic Cookie configuration
- Correctly set layer 4 protocol in multicast options
- Increased robustness of deserialization of configuration options
- Fixed handling of unknown Service Discovery options

v2.0.0
- Buffer sizes were adapted to the transport protocols
- Added support for IPv6 multicast
- Improved handling of endpoints
- Report service state changes instead of service state to the application
- Set and process TTL field in Service Discovery to support detection of "lost"
  services
- Support automatic configuration of local communication
- Added compile time variable DIAGNOSIS_ADDRESS (which maps to the high byte of
  the SOME/IP client identifier)
- Configuration of events was moved from configuration file to API.
- Fixed routing of notication events.
- Increased robustness of configuration loader
- Changed default watchdog cycle from 1s to 5s
- Removed TTL arguments from public interface
- Allow Service Discovery to report non-SOME/IP services by setting the
  configuration variable "protocol"
- Fixed serialization of major version in Eventgroup entries
- Magic Cookies are no longer forwarded to the routing manager but handled in
  the receiving endpoint
- vsomeip daemon was added

v1.3.0
- Fixed SD library loading on Windows
- Changed cmake directory name (CMake --> cmake)
- Corrected check for multicast address in Service Discovery
- Added default setting for Service Discovery timings
- Ensure only local services are reported by the Service Discovery
- Fixed a crash in case of a wrong unicast address definition
- Protected forwarding of availability information
- Improved handling of notification events
- Added initial support for selective broadcasts (CommonAPI)
- Avoid deadlock when offering services
- Correct handling of events
- Added initial support for managed interfaces (CommonAPI)

v1.2.0
- Added (optional) thread pool for distribution of messages to the application
- Made configuration of service groups optional (as it is unneeded in pure 
  client applications)
- Support specification of transportation mode (reliable (TCP) / unreliable
  (UDP)) when creating messages
- Fixed internal distribution of notication events
- Block messages that are received on the wrong port
- Fixed deregistration of local clients
- Fixed startup of applications that were started earlier than the routing
  manager
- Resetting all events of a service if it becomes unavailable (to ensure initial
  events are sent when it becomes available again)
- Ensure consistency of version information
- Fixed Service Discovery state machine

v1.1.0
- Local communication in multiprocessor environments was fixed
- Runtime access was changed from raw to shared pointer
- vsomeip logger is used whereever possible (replacing std::cerr calls)
- Ensure the logger is not deleted before issueing tha last log message when
  shutting down
- Fixed shutdown crash by checking the existence of endpoint host before
  accessing it
- Routing info processing in case of multiple instances of the same service
  was fixed
- Support for local communication on Windows was added
