/*
- * Copyright (c) 2014, Ford Motor Company
+ * \file transport_manager_default.cc
+ * \brief TransportManagerDefault class source file.
+ *
+ * Copyright (c) 2013, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "config_profile/profile.h"
+
#include "transport_manager/transport_manager_default.h"
#include "transport_manager/tcp/tcp_transport_adapter.h"
#endif
#ifdef USB_SUPPORT
-#include "transport_manager/usb/usb_adapter.h"
+#include "transport_manager/usb/usb_aoa_adapter.h"
+#endif
+
+#ifdef MME_SUPPORT
+#include "transport_manager/mme/mme_transport_adapter.h"
#endif
if (E_SUCCESS != TransportManagerImpl::Init()) {
return E_TM_IS_NOT_INITIALIZED;
}
-
+ transport_adapter::TransportAdapterImpl* ta;
#ifdef BLUETOOTH_SUPPORT
- AddTransportAdapter(new transport_adapter::BluetoothTransportAdapter);
+ ta = new transport_adapter::BluetoothTransportAdapter;
+ if (metric_observer_) {
+ ta->SetTimeMetricObserver(metric_observer_);
+ }
+ AddTransportAdapter(ta);
#endif
- const uint16_t kTcpAdapterPort = 12345;
- AddTransportAdapter(new transport_adapter::TcpTransportAdapter(kTcpAdapterPort));
+ uint16_t port = profile::Profile::instance()->transport_manager_tcp_adapter_port();
+ ta = new transport_adapter::TcpTransportAdapter(port);
+ if (metric_observer_) {
+ ta->SetTimeMetricObserver(metric_observer_);
+ }
+ AddTransportAdapter(ta);
#ifdef USB_SUPPORT
- AddTransportAdapter(new transport_adapter::UsbAdapter);
+ ta = new transport_adapter::UsbAoaAdapter();
+ if (metric_observer_) {
+ ta->SetTimeMetricObserver(metric_observer_);
+ }
+ AddTransportAdapter(ta);
+#endif
+#ifdef MME_SUPPORT
+ ta = new transport_adapter::MmeTransportAdapter();
+ if (metric_observer_) {
+ ta->SetTimeMetricObserver(metric_observer_);
+ }
+ AddTransportAdapter(ta);
#endif
return E_SUCCESS;
#include <functional>
#include <sstream>
#include "utils/macro.h"
+#include "utils/logger.h"
#include "protocol_handler/raw_message.h"
#include "protocol_handler/protocol_packet.h"
#include "transport_manager/transport_manager_impl.h"
namespace transport_manager {
-#ifdef ENABLE_LOG
-log4cxx::LoggerPtr TransportManagerImpl::logger_ =
- log4cxx::LoggerPtr(log4cxx::Logger::getLogger("TransportManager"));
-#endif // ENABLE_LOG
+CREATE_LOGGERPTR_GLOBAL(logger_, "TransportManager")
TransportManagerImpl::Connection TransportManagerImpl::convert(TransportManagerImpl::ConnectionInternal& p) {
TransportManagerImpl::Connection c;
if (messages_count > 0) {
connection->messages_count = messages_count;
connection->shutDown = true;
- connection->timer->start(
- profile::Profile::instance()->transport_manager_disconnect_timeout()
- );
+
+ const uint32_t disconnect_timeout =
+ profile::Profile::instance()->transport_manager_disconnect_timeout();
+ if (disconnect_timeout > 0) connection->timer->start(disconnect_timeout);
} else {
connection->transport_adapter->Disconnect(connection->device,
connection->application);
transport_adapter->Init() == TransportAdapter::OK) {
transport_adapters_.push_back(transport_adapter);
}
- if (metric_observer_) {
- transport_adapter->SetTimeMetricObserver(metric_observer_);
- }
return E_SUCCESS;
}
}
case TransportAdapterListenerImpl::EventTypeEnum::ON_CONNECT_DONE: {
LOG4CXX_INFO(logger_, "Event ON_CONNECT_DONE");
- AddConnection(ConnectionInternal(this, ta, ++connection_id_counter_,
- device_id, app_handle));
device_handle = converter_.UidToHandle(device_id);
+ AddConnection(ConnectionInternal(this, ta, ++connection_id_counter_,
+ device_id, app_handle,
+ device_handle));
RaiseEvent(
&TransportManagerListener::OnConnectionEstablished,
DeviceInfo(device_handle, device_id, ta->DeviceName(device_id)),
LOG4CXX_INFO(logger_, "Message queue thread finished");
}
+TransportManagerImpl::ConnectionInternal::ConnectionInternal(
+ TransportManagerImpl *transport_manager, TransportAdapter *transport_adapter,
+ const ConnectionUID &id, const DeviceUID &dev_id, const ApplicationHandle &app_id,
+ const DeviceHandle& device_handle)
+ : transport_manager(transport_manager),
+ transport_adapter(transport_adapter),
+ timer(new TimerInternal(this, &ConnectionInternal::DisconnectFailedRoutine)),
+ shutDown(false),
+ device_handle_(device_handle),
+ messages_count(0) {
+ Connection::id = id;
+ Connection::device = dev_id;
+ Connection::application = app_id;
+}
+
+void TransportManagerImpl::ConnectionInternal::DisconnectFailedRoutine() {
+ LOG4CXX_INFO(logger_, "Disconnection failed");
+ transport_manager->RaiseEvent(&TransportManagerListener::OnDisconnectFailed,
+ device_handle_, DisconnectDeviceError());
+ shutDown = false;
+ timer->stop();
+}
+
} // namespace transport_manager