diff options
author | JackLivio <jack@livio.io> | 2018-10-19 15:05:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-19 15:05:09 -0400 |
commit | d36316738785c96dab2ee892762ed08c059fffde (patch) | |
tree | 168a7c0705b5bc8f0dee7ce4b511ccf71759d9b4 /src/components/transport_manager/include | |
parent | 7f7fcbb998fb17f2954fd103349af67ea9b71a3f (diff) | |
parent | 83c5e805346d55ec7fb9f4ba8b6f6855d992273e (diff) | |
download | sdl_core-hotfix/templates_updates.tar.gz |
Merge pull request #2572 from smartdevicelink/release/5.0.05.0.0hotfix/templates_updatesfeature/show_app_menufeature/progress_bar_seekfeature/open-menu-rpcfeature/open-menu-rfeature/button
Release 5.0.0
Diffstat (limited to 'src/components/transport_manager/include')
17 files changed, 519 insertions, 20 deletions
diff --git a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h index 36a2b374dd..e53a472bcb 100644 --- a/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h +++ b/src/components/transport_manager/include/transport_manager/iap2_emulation/iap2_transport_adapter.h @@ -74,6 +74,15 @@ class IAP2BluetoothEmulationTransportAdapter : public TcpTransportAdapter { */ void DeviceSwitched(const DeviceUID& device_handle) OVERRIDE; + /** + * @brief Notification that transport's configuration is updated. This + * override is needed so that a OnTransportConfigUpdated is not sent to the + * mobile device for the emulated transport. + * + * @param new_config The new configuration of the transport + */ + void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE; + protected: /** * @brief GetDeviceType Provides SDL device type for transport adapter @@ -110,6 +119,15 @@ class IAP2USBEmulationTransportAdapter : public TcpTransportAdapter { */ void DeviceSwitched(const DeviceUID& device_handle) OVERRIDE; + /** + * @brief Notification that transport's configuration is updated. This + * override is needed so that a OnTransportConfigUpdated is not sent to the + * mobile device for the emulated transport. + * + * @param new_config The new configuration of the transport + */ + void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE; + protected: /** * @brief GetDeviceType Provides SDL device type for transport adapter diff --git a/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h new file mode 100644 index 0000000000..8154503077 --- /dev/null +++ b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener.h @@ -0,0 +1,41 @@ +#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_ +#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_ + +namespace transport_manager { +namespace transport_adapter { + +/** + * @brief Listener to detect various events on network interfaces + */ +class NetworkInterfaceListener { + public: + /** + * @brief Destructor + */ + virtual ~NetworkInterfaceListener() {} + + /** + * @brief Initialize this listener + */ + virtual bool Init() = 0; + + /** + * @brief Deinitialize this listener + */ + virtual void Deinit() = 0; + + /** + * @brief Start this listener + */ + virtual bool Start() = 0; + + /** + * @brief Stop this listener + */ + virtual bool Stop() = 0; +}; + +} // namespace transport_adapter +} // namespace transport_manager + +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_H_ diff --git a/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h new file mode 100644 index 0000000000..159b5ff21d --- /dev/null +++ b/src/components/transport_manager/include/transport_manager/tcp/network_interface_listener_impl.h @@ -0,0 +1,63 @@ +#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_ +#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_ + +#include <string> +#include <memory> + +#include "utils/macro.h" +#include "transport_manager/tcp/network_interface_listener.h" + +namespace transport_manager { +namespace transport_adapter { + +class TcpClientListener; + +/** + * @brief Listener to detect various events on network interfaces + */ +class NetworkInterfaceListenerImpl : public NetworkInterfaceListener { + public: + /** + * @brief Constructor + * + * @param tcp_client_listener an instance of TcpClientListener which receives + * status updates + * @param designated_interface if we want to listen only on a specific + * network interface, specify its name + */ + NetworkInterfaceListenerImpl(TcpClientListener* tcp_client_listener, + const std::string designated_interface); + + /** + * @brief Destructor + */ + virtual ~NetworkInterfaceListenerImpl(); + + /** + * @brief Initialize this listener + */ + bool Init() OVERRIDE; + + /** + * @brief Deinitialize this listener + */ + void Deinit() OVERRIDE; + + /** + * @brief Start this listener + */ + bool Start() OVERRIDE; + + /** + * @brief Stop this listener + */ + bool Stop() OVERRIDE; + + private: + std::unique_ptr<NetworkInterfaceListener> platform_specific_impl_; +}; + +} // namespace transport_adapter +} // namespace transport_manager + +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_NETWORK_INTERFACE_LISTENER_IMPL_H_ diff --git a/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h new file mode 100644 index 0000000000..bb60b09a9d --- /dev/null +++ b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/linux/platform_specific_network_interface_listener_impl.h @@ -0,0 +1,201 @@ +#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ +#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ + +#include <map> +#include <string> +#include <vector> + +#include <netinet/in.h> +#include "transport_manager/tcp/network_interface_listener.h" +#include "utils/macro.h" +#include "utils/threads/thread_delegate.h" + +struct ifaddrmsg; + +namespace transport_manager { +namespace transport_adapter { + +class TcpClientListener; + +/** + * @brief Struct to keep network interface's status flags and IP addresses + */ +class InterfaceStatus { + public: + InterfaceStatus() + : flags_(0) + , has_ipv4_(false) + , has_ipv6_(false) + , ipv4_address_() + , ipv6_address_() {} + ~InterfaceStatus() {} + + bool IsAvailable() const; + bool IsLoopback() const; + // only for debugging output + unsigned int GetFlags() const { + return flags_; + } + + bool HasIPAddress() const; + std::string GetIPv4Address() const; + std::string GetIPv6Address() const; + + void SetFlags(unsigned int flags) { + flags_ = flags; + } + + // specify NULL to remove existing address + void SetIPv4Address(struct in_addr* addr); + void SetIPv6Address(struct in6_addr* addr); + + private: + unsigned int flags_; + bool has_ipv4_; + bool has_ipv6_; + struct in_addr ipv4_address_; + struct in6_addr ipv6_address_; +}; + +typedef std::map<std::string, InterfaceStatus> InterfaceStatusTable; + +/** + * @brief Listener to detect various events on network interfaces + */ +class PlatformSpecificNetworkInterfaceListener + : public NetworkInterfaceListener { + public: + /** + * @brief Constructor + * + * @param tcp_client_listener an instance of TcpClientListener which receives + * status updates + * @param designated_interface if we want to listen only on a specific + * network interface, specify its name + */ + PlatformSpecificNetworkInterfaceListener( + TcpClientListener* tcp_client_listener, + const std::string designated_interface = ""); + + /** + * @brief Destructor + */ + virtual ~PlatformSpecificNetworkInterfaceListener(); + + /** + * @brief Initialize this listener + */ + bool Init() OVERRIDE; + + /** + * @brief Deinitialize this listener + */ + void Deinit() OVERRIDE; + + /** + * @brief Start this listener + */ + bool Start() OVERRIDE; + + /** + * @brief Stop this listener + */ + bool Stop() OVERRIDE; + +#ifdef BUILD_TESTS + void SetTesting(bool enabled) { + testing_ = enabled; + } + + int GetSocket() const { + return socket_; + } + + threads::Thread* GetThread() const { + return thread_; + } + + void OverwriteStatusTable(const InterfaceStatusTable dummy_table) { + status_table_ = dummy_table; + } + + void testCallNotifyIPAddresses() { + NotifyIPAddresses(); + } + + const std::string& GetSelectedInterfaceName() const { + return selected_interface_; + } +#endif // BUILD_TESTS + + private: + // Struct to hold an event on a network interface. + // The event can be either an update on flags or an update on IP address. + struct EventParam { + unsigned int if_index; + unsigned int flags; + struct sockaddr_storage address; + + EventParam(int interface_index, unsigned int interface_flags = 0) + : if_index(interface_index), flags(interface_flags), address() {} + }; + + // parent class which we will notify the events to + TcpClientListener* tcp_client_listener_; + // if configured, NetworkInterfaceListener will always look into the IP + // addresses of this interface + const std::string designated_interface_; + + // a map to store status of each interface + InterfaceStatusTable status_table_; + // this is the name of the interface we are currently focusing on + std::string selected_interface_; + // previous IP addresses that we have notified + std::string notified_ipv4_addr_; + std::string notified_ipv6_addr_; + + int socket_; + int pipe_fds_[2]; + threads::Thread* thread_; + +#ifdef BUILD_TESTS + bool testing_; +#endif + + void Loop(); + bool StopLoop(); + + // reset status_table_ by fetching current status of each interface + bool InitializeStatus(); + // update status_table_ by applying the events + bool UpdateStatus(uint16_t type, std::vector<EventParam>& params); + // update notified_ipv4_addr_ and notified_ipv6_addr_ then notify the parent + // class of the change if necessary + void NotifyIPAddresses(); + // Select an appropriate network interface that we will get IP addresses. Also + // update selected_interface_. + const std::string SelectInterface(); + // convert ifaddrmsg to a list of EventParam structs + std::vector<EventParam> ParseIFAddrMessage(struct ifaddrmsg* message, + unsigned int size); + // for debugging + void DumpTable() const; + + class ListenerThreadDelegate : public threads::ThreadDelegate { + public: + explicit ListenerThreadDelegate( + PlatformSpecificNetworkInterfaceListener* parent); + virtual void threadMain(); + void exitThreadMain(); + + private: + PlatformSpecificNetworkInterfaceListener* parent_; + }; + + DISALLOW_COPY_AND_ASSIGN(PlatformSpecificNetworkInterfaceListener); +}; + +} // namespace transport_adapter +} // namespace transport_manager + +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_LINUX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ diff --git a/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h new file mode 100644 index 0000000000..2cb5eb47a7 --- /dev/null +++ b/src/components/transport_manager/include/transport_manager/tcp/platform_specific/qnx/platform_specific_network_interface_listener_impl.h @@ -0,0 +1,70 @@ +#ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ +#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ + +#include <map> +#include <string> +#include <vector> + +#include <netinet/in.h> +#include "transport_manager/tcp/network_interface_listener.h" +#include "utils/macro.h" +#include "utils/threads/thread_delegate.h" + +class Thread; +struct ifaddrmsg; + +namespace transport_manager { +namespace transport_adapter { + +class TcpClientListener; + +/** + * @brief Listener to detect various events on network interfaces + */ +class PlatformSpecificNetworkInterfaceListener + : public NetworkInterfaceListener { + public: + /** + * @brief Constructor + * + * @param tcp_client_listener an instance of TcpClientListener which receives + * status updates + * @param designated_interface if we want to listen only on a specific + * network interface, specify its name + */ + PlatformSpecificNetworkInterfaceListener( + TcpClientListener* tcp_client_listener, + const std::string designated_interface = ""); + + /** + * @brief Destructor + */ + virtual ~PlatformSpecificNetworkInterfaceListener(); + + /** + * @brief Initialize this listener + */ + bool Init() OVERRIDE; + + /** + * @brief Deinitialize this listener + */ + void Deinit() OVERRIDE; + + /** + * @brief Start this listener + */ + bool Start() OVERRIDE; + + /** + * @brief Stop this listener + */ + bool Stop() OVERRIDE; + + private: +}; + +} // namespace transport_adapter +} // namespace transport_manager + +#endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_PLATFORM_SPECIFIC_QNX_PLATFORM_SPECIFIC_NETWORK_INTERFACE_LISTENER_H_ diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h index 2640049ecc..0f9529d8d8 100644 --- a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h +++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h @@ -36,15 +36,18 @@ #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_ +#include "utils/lock.h" #include "utils/threads/thread_delegate.h" #include "transport_manager/transport_adapter/client_connection_listener.h" class Thread; +struct in_addr; namespace transport_manager { namespace transport_adapter { class TransportAdapterController; +class NetworkInterfaceListener; /** * @brief Listener of device adapter that use TCP transport. @@ -57,11 +60,15 @@ class TcpClientListener : public ClientConnectionListener { * @param controller Pointer to the device adapter controller. * @param port Port No. * @param enable_keepalive If true enables TCP keepalive on accepted + * @param designated_interface Specify the name of the network interface to + *listen on. If empty, then this process will listen on all network + *interfaces. *connections */ TcpClientListener(TransportAdapterController* controller, uint16_t port, - bool enable_keepalive); + bool enable_keepalive, + const std::string designated_interface = ""); /** * @brief Destructor. @@ -101,7 +108,18 @@ class TcpClientListener : public ClientConnectionListener { */ virtual TransportAdapter::Error StopListening(); + /** + * @brief Called from NetworkInterfaceListener when IP address of the network + * interface is changed. + */ + virtual void OnIPAddressUpdated(const std::string ipv4_addr, + const std::string ipv6_addr); + #ifdef BUILD_TESTS + void set_network_interface_listener(NetworkInterfaceListener* listener) { + interface_listener_ = listener; + } + uint16_t port() const { return port_; } @@ -113,19 +131,47 @@ class TcpClientListener : public ClientConnectionListener { threads::Thread* thread() const { return thread_; } + + static void set_testing(bool enabled) { + testing_ = enabled; + } #endif // BUILD_TESTS private: const uint16_t port_; const bool enable_keepalive_; TransportAdapterController* controller_; + bool initialized_; + bool started_; threads::Thread* thread_; int socket_; bool thread_stop_requested_; + int pipe_fds_[2]; + NetworkInterfaceListener* interface_listener_; + const std::string designated_interface_; + std::string current_ip_address_; + sync_primitives::Lock start_stop_lock_; + +#ifdef BUILD_TESTS + static bool testing_; +#endif // BUILD_TESTS void Loop(); void StopLoop(); + TransportAdapter::Error StartListeningThread(); + TransportAdapter::Error StopListeningThread(); + + bool StartOnNetworkInterface(); + bool StopOnNetworkInterface(); + bool IsListeningOnSpecificInterface() const; + + static int CreateIPv4ServerSocket(uint16_t port, + const std::string interface_name = ""); + static void DestroyServerSocket(int sock); + static bool GetIPv4Address(const std::string interface_name, + struct in_addr* ip_address); + class ListeningThreadDelegate : public threads::ThreadDelegate { public: explicit ListeningThreadDelegate(TcpClientListener* parent); diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h index 5431b4455d..37f5a7fe49 100644 --- a/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h +++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_transport_adapter.h @@ -58,6 +58,18 @@ class TcpTransportAdapter : public TransportAdapterImpl { */ virtual ~TcpTransportAdapter(); + /** + * @brief Notification that transport's configuration is updated + * + * @param new_config The new configuration of the transport + */ + void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE; + + /** + * @brief Returns the transport's configuration information + */ + virtual TransportConfig GetTransportConfiguration() const OVERRIDE; + protected: /** * @brief Return type of device. @@ -77,6 +89,19 @@ class TcpTransportAdapter : public TransportAdapterImpl { * @return True on success false otherwise */ virtual bool Restore(); + + private: + /** + * @brief Keeps transport specific configuration + * + * TCP transport uses following information: + * - "enabled": whether the transport is currently enabled or not. Value can + * be "true" or "false". + * - "tcp_ip_address": string representation of IP address (either IPv4 or + * IPv6) + * - "tcp_port": string representation of TCP port number (e.g. "12345") + */ + TransportConfig transport_config_; }; } // namespace transport_adapter diff --git a/src/components/transport_manager/include/transport_manager/telemetry_observer.h b/src/components/transport_manager/include/transport_manager/telemetry_observer.h index 5e42289a03..a38255966b 100644 --- a/src/components/transport_manager/include/transport_manager/telemetry_observer.h +++ b/src/components/transport_manager/include/transport_manager/telemetry_observer.h @@ -42,8 +42,8 @@ namespace transport_manager { class TMTelemetryObserver { public: struct MessageMetric { - TimevalStruct begin; - TimevalStruct end; + date_time::TimeDuration begin; + date_time::TimeDuration end; size_t data_size; }; virtual void StartRawMsg(const protocol_handler::RawMessage* ptr) = 0; diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h index 537e94b055..2374d8a126 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/connection.h @@ -35,7 +35,6 @@ #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_CONNECTION_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_ADAPTER_CONNECTION_H_ -#include "utils/shared_ptr.h" #include "transport_manager/transport_adapter/transport_adapter.h" namespace transport_manager { @@ -67,7 +66,7 @@ class Connection { virtual TransportAdapter::Error Disconnect() = 0; }; -typedef utils::SharedPtr<Connection> ConnectionSPtr; +typedef std::shared_ptr<Connection> ConnectionSPtr; } // namespace transport_adapter } // namespace transport_manager diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h index 3792b94d7c..f1c679c123 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/threaded_socket_connection.h @@ -40,7 +40,7 @@ #include "transport_manager/transport_adapter/connection.h" #include "protocol/common.h" -#include "utils/atomic_object.h" +#include <atomic> #include "utils/threads/thread_delegate.h" #include "utils/lock.h" @@ -201,7 +201,7 @@ class ThreadedSocketConnection : public Connection { FrameQueue frames_to_send_; mutable sync_primitives::Lock frames_to_send_mutex_; - sync_primitives::atomic_int socket_; + std::atomic_int socket_; bool terminate_flag_; bool unexpected_disconnect_; const DeviceUID device_uid_; diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h index 0b38f82637..69d76b4b2b 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_controller.h @@ -204,6 +204,13 @@ class TransportAdapterController { const ApplicationHandle& app_handle, ::protocol_handler::RawMessagePtr message, const DataSendError&) = 0; + + /** + * @brief Notification that transport's configuration is updated + * + * @param new_config The new configuration of the transport + */ + virtual void TransportConfigUpdated(const TransportConfig& new_config) = 0; }; } // namespace transport_adapter diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h index 2b1ada79ad..078f93b32f 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h @@ -400,6 +400,13 @@ class TransportAdapterImpl : public TransportAdapter, const DataSendError& error) OVERRIDE; /** + * @brief Notification that transport's configuration is updated + * + * @param new_config The new configuration of the transport + */ + void TransportConfigUpdated(const TransportConfig& new_config) OVERRIDE; + + /** * @brief DoTransportSwitch notifies listeners of transport adapter events * that transport switching is requested by system */ @@ -420,6 +427,14 @@ class TransportAdapterImpl : public TransportAdapter, SwitchableDevices GetSwitchableDevices() const OVERRIDE; /** + * @brief Returns the transport's configuration information + */ + virtual TransportConfig GetTransportConfiguration() const OVERRIDE { + // default is empty + return TransportConfig(); + } + + /** * @brief Return name of device. * * @param device_id Device unique identifier. diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h index 424fa53dea..4606bac2d4 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener.h @@ -277,6 +277,15 @@ class TransportAdapterListener { */ virtual void OnTransportSwitchRequested( const TransportAdapter* transport_adapter) = 0; + + /** + * @brief Notification that the transport's specific configuration has been + * updated. + * + * @param transport_adapter pointer to the transport adapter + */ + virtual void OnTransportConfigUpdated( + const TransportAdapter* transport_adapter) = 0; }; } // transport_adapter namespace diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h index 8a8031c3cf..a744400279 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_listener_impl.h @@ -272,6 +272,15 @@ class TransportAdapterListenerImpl */ void OnTransportSwitchRequested(const TransportAdapter* adapter) OVERRIDE; + /** + * @brief Notification that the transport's specific configuration has been + * updated. + * + * @param transport_adapter pointer to the transport adapter + */ + void OnTransportConfigUpdated( + const transport_adapter::TransportAdapter* adapter) OVERRIDE; + private: TransportManager* transport_manager_; TransportAdapter* transport_adapter_; diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h index eaa71ce3bb..c1df49f91b 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h @@ -64,7 +64,7 @@ typedef threads::MessageLoopThread<std::queue<protocol_handler::RawMessagePtr> > RawMessageLoopThread; typedef threads::MessageLoopThread<std::queue<TransportAdapterEvent> > TransportAdapterEventLoopThread; -typedef utils::SharedPtr<timer::Timer> TimerSPtr; +typedef std::shared_ptr<timer::Timer> TimerSPtr; typedef std::map<DeviceUID, TransportAdapter*> DeviceToAdapterMap; /** @@ -245,14 +245,6 @@ class TransportManagerImpl int Visibility(const bool& on_off) const OVERRIDE; /** - * DEPRECATED - * Must be moved under 'private' section - * @brief Updates total device list with info from specific transport adapter. - * @param ta Transport adapter - */ - void UpdateDeviceList(TransportAdapter* ta); - - /** * @brief OnDeviceListUpdated updates device list and sends appropriate * notifications to listeners in case of something is changed * @param ta Transport adapter to check for updated devices state @@ -501,6 +493,12 @@ class TransportManagerImpl * @return True if mapping has been updated, otherwise - false */ bool UpdateDeviceMapping(TransportAdapter* ta); + + /** + * @brief Updates total device list with info from specific transport adapter. + * @param ta Transport adapter + */ + void UpdateDeviceList(TransportAdapter* ta); }; // class TransportManagerImpl } // namespace transport_manager #endif // SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TRANSPORT_MANAGER_IMPL_H_ diff --git a/src/components/transport_manager/include/transport_manager/usb/common.h b/src/components/transport_manager/include/transport_manager/usb/common.h index 1c6011dbb2..1db1a83a3a 100644 --- a/src/components/transport_manager/include/transport_manager/usb/common.h +++ b/src/components/transport_manager/include/transport_manager/usb/common.h @@ -35,8 +35,6 @@ #include <stdint.h> -#include "utils/shared_ptr.h" - #if defined(__QNXNTO__) #include "transport_manager/usb/qnx/usb_handler.h" #else @@ -64,7 +62,7 @@ static const uint16_t kApplePid8 = 0x12a8; // iPhone 5 static const int kUsbConfiguration = 1; -typedef utils::SharedPtr<UsbHandler> UsbHandlerSptr; +typedef std::shared_ptr<UsbHandler> UsbHandlerSptr; class UsbDeviceListener { public: diff --git a/src/components/transport_manager/include/transport_manager/usb/usb_device.h b/src/components/transport_manager/include/transport_manager/usb/usb_device.h index 8ca1a32a28..ea31bb0376 100644 --- a/src/components/transport_manager/include/transport_manager/usb/usb_device.h +++ b/src/components/transport_manager/include/transport_manager/usb/usb_device.h @@ -54,9 +54,9 @@ class UsbDevice : public Device { return usb_device_; } - protected: virtual ~UsbDevice() {} + protected: virtual bool IsSameAs(const Device* other_device) const { return unique_device_id() == other_device->unique_device_id(); } |