#include "OCApi.h"
#include "CAManager.h"
#include "cautilinterface.h"
+#include "casecurityinterface.h"
+#include "logger.h"
-using namespace OC;
+#define TAG "OIC_CAMANAGER"
+using namespace OC;
namespace
{
- CAManager::AdapterChangedCallback g_adapterHandler = NULL;
- CAManager::ConnectionChangedCallback g_connectionHandler = NULL;
+ CAManager::AdapterChangedCallback g_adapterHandler = nullptr;
+ CAManager::ConnectionChangedCallback g_connectionHandler = nullptr;
+}
+
+OCStackResult convertCAResultToOCResult(CAResult_t caResult)
+{
+ switch (caResult)
+ {
+ case CA_STATUS_OK:
+ return OC_STACK_OK;
+ case CA_STATUS_INVALID_PARAM:
+ return OC_STACK_INVALID_PARAM;
+ case CA_STATUS_FAILED:
+ return OC_STACK_ERROR;
+ case CA_NOT_SUPPORTED:
+ return OC_STACK_NOTIMPL;
+ default:
+ return OC_STACK_ERROR;
+ }
}
void DefaultAdapterStateChangedHandler(CATransportAdapter_t adapter, bool enabled)
}
}
-void DefaultConnectionStateChangedHandler(CATransportAdapter_t adapter,
- const char *remote_address, bool connected)
+void DefaultConnectionStateChangedHandler(const CAEndpoint_t *info, bool isConnected)
{
if (g_connectionHandler)
{
- g_connectionHandler((OCTransportAdapter) adapter, remote_address, connected);
+ std::ostringstream ss;
+
+ if (info->flags & CA_IPV6)
+ {
+ ss << '[' << info->addr << ']';
+ }
+ else
+ {
+ ss << info->addr;
+ }
+ if (info->port)
+ {
+ ss << ':' << info->port;
+ }
+
+ OCTransportAdapter adapter = (OCTransportAdapter)info->adapter;
+ OCTransportFlags flags = (OCTransportFlags)info->flags;
+ OCConnectivityType connType = (OCConnectivityType)
+ ((adapter << CT_ADAPTER_SHIFT) | (flags & CT_MASK_FLAGS));
+
+ g_connectionHandler(ss.str(), connType, isConnected);
}
}
CAResult_t ret = CARegisterNetworkMonitorHandler(DefaultAdapterStateChangedHandler,
DefaultConnectionStateChangedHandler);
- switch (ret)
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::setPortNumberToAssign(OCTransportAdapter adapter,
+ OCTransportFlags flag, uint16_t port)
+{
+ OIC_LOG(INFO, TAG, "setPortNumberToAssign");
+ CAResult_t ret = CASetPortNumberToAssign((CATransportAdapter_t) adapter,
+ (CATransportFlags_t) flag, port);
+
+ return convertCAResultToOCResult(ret);
+}
+
+uint16_t CAManager::getAssignedPortNumber(OCTransportAdapter adapter, OCTransportFlags flag)
+{
+ OIC_LOG(INFO, TAG, "getAssignedPortNumber");
+ return CAGetAssignedPortNumber((CATransportAdapter_t) adapter, (CATransportFlags_t) flag);
+}
+
+OCStackResult CAManager::setMulticastTTL(size_t ttl)
+{
+ OIC_LOG(INFO, TAG, "setMulticastTTL");
+ CAResult_t ret = CAUtilSetMulticastTTL(ttl);
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::getMulticastTTL(size_t *ttl)
+{
+ OIC_LOG(INFO, TAG, "getMulticastTTL");
+ CAResult_t ret = CAUtilGetMulticastTTL(ttl);
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::setBTConfigure(const CAUtilConfig& config)
+{
+ OIC_LOG(INFO, TAG, "setBTConfigure");
+ CAUtilConfig_t configs = {(CATransportBTFlags_t)config.bleFlag, { {0}, .adapter = CA_DEFAULT_ADAPTER, .level = HIGH_SPEED }};
+ CAResult_t ret = CAUtilSetBTConfigure(configs);
+ return convertCAResultToOCResult(ret);
+}
+
+void CAManager::setLogLevel(OCLogLevel level, bool hidePrivateLogEntries)
+{
+ OIC_LOG(INFO, TAG, "setLogLevel");
+ CAUtilSetLogLevel((CAUtilLogLevel_t) level, hidePrivateLogEntries);
+}
+
+#if defined(__WITH_DTLS__) || defined(__WITH_TLS__)
+OCStackResult CAManager::setCipherSuite(const uint16_t cipher, OCTransportAdapter adapter)
+{
+ CAResult_t ret = CASelectCipherSuite(cipher, (CATransportAdapter_t) adapter);
+ return convertCAResultToOCResult(ret);
+}
+#endif // defined(__WITH_DTLS__) || defined(__WITH_TLS__)
+
+#if defined(__TIZEN__) && defined(LE_ADAPTER) && defined(BLE_CUSTOM_ADVERTISE)
+OCStackResult CAManager::setAdvertisementData(const char* data, int length)
+{
+ CAResult_t ret = CASetAdvertisementData(data, length);
+
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::setScanResponseData(const char* data, int length)
+{
+ CAResult_t ret = CASetScanResponseData(data, length);
+
+ return convertCAResultToOCResult(ret);
+}
+#endif
+
+OCStackResult CAManager::startLEAdvertising()
+{
+ OIC_LOG(INFO, TAG, "startLEAdvertising");
+ CAResult_t ret = CAUtilStartLEAdvertising();
+
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::stopLEAdvertising()
+{
+ OIC_LOG(INFO, TAG, "stopLEAdvertising");
+ CAResult_t ret = CAUtilStopLEAdvertising();
+
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::disconnectTCPSession(const char *address,
+ uint16_t port,
+ OCTransportFlags flags)
+{
+ if (!address)
{
- case CA_STATUS_OK:
- return OC_STACK_OK;
- case CA_NOT_SUPPORTED:
- return OC_STACK_NOTIMPL;
- default:
- return OC_STACK_ERROR;
+ OIC_LOG(ERROR, TAG, "address is invalid");
+ return OCStackResult::OC_STACK_INVALID_PARAM;
}
+
+ OIC_LOG_V(INFO, TAG, "disconnectTCPSession [addr:%s][port:%d][flags:%d]",
+ address, port, flags);
+ CAResult_t ret = CAUtilTCPDisconnectSession(address, port, (CATransportFlags_t)flags);
+
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::startCAGattServer()
+{
+ OIC_LOG(INFO, TAG, "startCAGattServer]");
+ CAResult_t ret = CAUtilStartGattServer();
+
+ return convertCAResultToOCResult(ret);
+}
+
+OCStackResult CAManager::stopCAGattServer()
+{
+ OIC_LOG(INFO, TAG, "stopCAGattServer]");
+ CAResult_t ret = CAUtilStopGattServer();
+
+ return convertCAResultToOCResult(ret);
}