Merge branch 'master' into windows-port
[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(CATransportAdapter_t adapter,
66                                           const char *remote_address, bool connected)
67 {
68     if (g_connectionHandler)
69     {
70         g_connectionHandler((OCTransportAdapter) adapter, remote_address, connected);
71     }
72 }
73
74 OCStackResult CAManager::setNetworkMonitorHandler(AdapterChangedCallback adapterHandler,
75                                                   ConnectionChangedCallback connectionHandler)
76 {
77     g_adapterHandler = adapterHandler;
78     g_connectionHandler = connectionHandler;
79
80     CAResult_t ret = CARegisterNetworkMonitorHandler(DefaultAdapterStateChangedHandler,
81                                                      DefaultConnectionStateChangedHandler);
82
83     return convertCAResultToOCResult(ret);
84 }
85
86 OCStackResult CAManager::setPortNumberToAssign(OCTransportAdapter adapter,
87                                                OCTransportFlags flag, uint16_t port)
88 {
89     CAResult_t ret = CASetPortNumberToAssign((CATransportAdapter_t) adapter,
90                                              (CATransportFlags_t) flag, port);
91
92     return convertCAResultToOCResult(ret);
93 }
94
95 uint16_t CAManager::getAssignedPortNumber(OCTransportAdapter adapter, OCTransportFlags flag)
96 {
97     return CAGetAssignedPortNumber((CATransportAdapter_t) adapter, (CATransportFlags_t) flag);
98 }