1 /* ****************************************************************
3 * Copyright 2016 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
24 * This file contains the implementation of classes and its members related
25 * to CAManager. Network changes status will be passed from CA to application.
29 #include "CAManager.h"
30 #include "cautilinterface.h"
31 #include "casecurityinterface.h"
34 #define TAG "OIC_CAMANAGER"
39 CAManager::AdapterChangedCallback g_adapterHandler = nullptr;
40 CAManager::ConnectionChangedCallback g_connectionHandler = nullptr;
43 OCStackResult convertCAResultToOCResult(CAResult_t caResult)
49 case CA_STATUS_INVALID_PARAM:
50 return OC_STACK_INVALID_PARAM;
51 case CA_STATUS_FAILED:
52 return OC_STACK_ERROR;
53 case CA_NOT_SUPPORTED:
54 return OC_STACK_NOTIMPL;
56 return OC_STACK_ERROR;
60 void DefaultAdapterStateChangedHandler(CATransportAdapter_t adapter, bool enabled)
64 OIC_LOG(INFO, TAG, "Before calling into application address space for adapterStateChanged");
65 g_adapterHandler((OCTransportAdapter) adapter, enabled);
66 OIC_LOG(INFO, TAG, "After calling into application address space for adapterStateChanged");
70 void DefaultConnectionStateChangedHandler(const CAEndpoint_t *info, bool isConnected)
72 if (g_connectionHandler)
74 std::ostringstream ss;
76 if (info->flags & CA_IPV6)
78 ss << '[' << info->addr << ']';
86 ss << ':' << info->port;
89 OCTransportAdapter adapter = (OCTransportAdapter)info->adapter;
90 OCTransportFlags flags = (OCTransportFlags)info->flags;
91 OCConnectivityType connType = (OCConnectivityType)
92 ((adapter << CT_ADAPTER_SHIFT) | (flags & CT_MASK_FLAGS));
94 OIC_LOG(INFO, TAG, "Before calling into application address space for connectionStateChanged");
95 g_connectionHandler(ss.str(), connType, isConnected);
96 OIC_LOG(INFO, TAG, "After calling into application address space for connectionStateChanged");
100 OCStackResult CAManager::setNetworkMonitorHandler(AdapterChangedCallback adapterHandler,
101 ConnectionChangedCallback connectionHandler)
103 if (!adapterHandler || !connectionHandler)
105 return OC_STACK_INVALID_PARAM;
107 g_adapterHandler = adapterHandler;
108 g_connectionHandler = connectionHandler;
110 CAResult_t ret = CARegisterNetworkMonitorHandler(DefaultAdapterStateChangedHandler,
111 DefaultConnectionStateChangedHandler);
113 return convertCAResultToOCResult(ret);
116 OCStackResult CAManager::setPortNumberToAssign(OCTransportAdapter adapter,
117 OCTransportFlags flag, uint16_t port)
119 OIC_LOG(INFO, TAG, "setPortNumberToAssign");
120 CAResult_t ret = CASetPortNumberToAssign((CATransportAdapter_t) adapter,
121 (CATransportFlags_t) flag, port);
123 return convertCAResultToOCResult(ret);
126 uint16_t CAManager::getAssignedPortNumber(OCTransportAdapter adapter, OCTransportFlags flag)
128 OIC_LOG(INFO, TAG, "getAssignedPortNumber");
129 return CAGetAssignedPortNumber((CATransportAdapter_t) adapter, (CATransportFlags_t) flag);
132 OCStackResult CAManager::setMulticastTTL(size_t ttl)
134 OIC_LOG(INFO, TAG, "setMulticastTTL");
135 CAResult_t ret = CAUtilSetMulticastTTL(ttl);
136 return convertCAResultToOCResult(ret);
139 OCStackResult CAManager::getMulticastTTL(size_t *ttl)
141 OIC_LOG(INFO, TAG, "getMulticastTTL");
142 CAResult_t ret = CAUtilGetMulticastTTL(ttl);
143 return convertCAResultToOCResult(ret);
146 OCStackResult CAManager::setBTConfigure(const CAUtilConfig& config)
148 OIC_LOG(INFO, TAG, "setBTConfigure");
149 CAUtilConfig_t configs = {(CATransportBTFlags_t)config.bleFlag, { {0}, .adapter = CA_DEFAULT_ADAPTER, .level = HIGH_SPEED }};
150 CAResult_t ret = CAUtilSetBTConfigure(configs);
151 return convertCAResultToOCResult(ret);
154 void CAManager::setLogLevel(OCLogLevel level, bool hidePrivateLogEntries)
156 OIC_LOG(INFO, TAG, "setLogLevel");
157 CAUtilSetLogLevel((CAUtilLogLevel_t) level, hidePrivateLogEntries);
160 #if defined(__WITH_DTLS__) || defined(__WITH_TLS__)
161 OCStackResult CAManager::setCipherSuite(const uint16_t cipher, OCTransportAdapter adapter)
163 CAResult_t ret = CASelectCipherSuite(cipher, (CATransportAdapter_t) adapter);
164 return convertCAResultToOCResult(ret);
166 #endif // defined(__WITH_DTLS__) || defined(__WITH_TLS__)
168 #if defined(__TIZEN__) && defined(LE_ADAPTER) && defined(BLE_CUSTOM_ADVERTISE)
169 OCStackResult CAManager::setAdvertisementData(const char* data, int length)
171 CAResult_t ret = CASetAdvertisementData(data, length);
173 return convertCAResultToOCResult(ret);
175 void CAManager::setAdvertisementDataGetter(CAAdvertisementDataGetterCB getter)
177 CASetAdvertisementDataGetter(getter);
179 void CAManager::setAutoAdvertisement(bool autoAdvertisement)
181 CASetAutoAdvertisement(autoAdvertisement);
183 OCStackResult CAManager::setScanResponseData(const char* data, int length)
185 CAResult_t ret = CASetScanResponseData(data, length);
187 return convertCAResultToOCResult(ret);
191 OCStackResult CAManager::startLEAdvertising()
193 OIC_LOG(INFO, TAG, "startLEAdvertising");
194 CAResult_t ret = CAUtilStartLEAdvertising();
196 return convertCAResultToOCResult(ret);
199 OCStackResult CAManager::stopLEAdvertising()
201 OIC_LOG(INFO, TAG, "stopLEAdvertising");
202 CAResult_t ret = CAUtilStopLEAdvertising();
204 return convertCAResultToOCResult(ret);
207 OCStackResult CAManager::disconnectTCPSession(const char *address,
209 OCTransportFlags flags)
213 OIC_LOG(ERROR, TAG, "address is invalid");
214 return OCStackResult::OC_STACK_INVALID_PARAM;
217 OIC_LOG_V(INFO, TAG, "disconnectTCPSession [addr:%s][port:%d][flags:%d]",
218 address, port, flags);
219 CAResult_t ret = CAUtilTCPDisconnectSession(address, port, (CATransportFlags_t)flags);
221 return convertCAResultToOCResult(ret);
224 OCStackResult CAManager::startCAGattServer()
226 OIC_LOG(INFO, TAG, "startCAGattServer]");
227 CAResult_t ret = CAUtilStartGattServer();
229 return convertCAResultToOCResult(ret);
232 OCStackResult CAManager::stopCAGattServer()
234 OIC_LOG(INFO, TAG, "stopCAGattServer]");
235 CAResult_t ret = CAUtilStopGattServer();
237 return convertCAResultToOCResult(ret);