Merge branch 'master' into cloud-interface
[platform/upstream/iotivity.git] / resource / src / CAManager.cpp
1 /* ****************************************************************
2  *
3  * Copyright 2016 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  ******************************************************************/
20
21 /**
22  * @file
23  *
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.
26  */
27
28 #include "OCApi.h"
29 #include "CAManager.h"
30 #include "cautilinterface.h"
31
32 using namespace OC;
33
34 namespace
35 {
36         CAManager::AdapterChangedCallback g_adapterHandler = nullptr;
37         CAManager::ConnectionChangedCallback g_connectionHandler = nullptr;
38 }
39
40 OCStackResult convertCAResultToOCResult(CAResult_t caResult)
41 {
42     switch (caResult)
43     {
44         case CA_STATUS_OK:
45             return OC_STACK_OK;
46         case CA_STATUS_INVALID_PARAM:
47             return OC_STACK_INVALID_PARAM;
48         case CA_STATUS_FAILED:
49             return OC_STACK_ERROR;
50         case CA_NOT_SUPPORTED:
51             return OC_STACK_NOTIMPL;
52         default:
53             return OC_STACK_ERROR;
54     }
55 }
56
57 void DefaultAdapterStateChangedHandler(CATransportAdapter_t adapter, bool enabled)
58 {
59     if (g_adapterHandler)
60     {
61         g_adapterHandler((OCTransportAdapter) adapter, enabled);
62     }
63 }
64
65 void DefaultConnectionStateChangedHandler(const CAEndpoint_t *info, bool isConnected)
66 {
67     if (g_connectionHandler)
68     {
69         std::ostringstream ss;
70
71         if (info->flags & CA_IPV6)
72         {
73             ss << '[' << info->addr << ']';
74         }
75         else
76         {
77             ss << info->addr;
78         }
79         if (info->port)
80         {
81             ss << ':' << info->port;
82         }
83
84         OCTransportAdapter adapter = (OCTransportAdapter)info->adapter;
85         OCTransportFlags flags = (OCTransportFlags)info->flags;
86         OCConnectivityType connType = (OCConnectivityType)
87                 ((adapter << CT_ADAPTER_SHIFT) | (flags & CT_MASK_FLAGS));
88
89         g_connectionHandler(ss.str(), connType, isConnected);
90     }
91 }
92
93 OCStackResult CAManager::setNetworkMonitorHandler(AdapterChangedCallback adapterHandler,
94                                                   ConnectionChangedCallback connectionHandler)
95 {
96     g_adapterHandler = adapterHandler;
97     g_connectionHandler = connectionHandler;
98
99     CAResult_t ret = CARegisterNetworkMonitorHandler(DefaultAdapterStateChangedHandler,
100                                                      DefaultConnectionStateChangedHandler);
101
102     return convertCAResultToOCResult(ret);
103 }
104
105 OCStackResult CAManager::setPortNumberToAssign(OCTransportAdapter adapter,
106                                                OCTransportFlags flag, uint16_t port)
107 {
108     CAResult_t ret = CASetPortNumberToAssign((CATransportAdapter_t) adapter,
109                                              (CATransportFlags_t) flag, port);
110
111     return convertCAResultToOCResult(ret);
112 }
113
114 uint16_t CAManager::getAssignedPortNumber(OCTransportAdapter adapter, OCTransportFlags flag)
115 {
116     return CAGetAssignedPortNumber((CATransportAdapter_t) adapter, (CATransportFlags_t) flag);
117 }