[Enrollee] Implement ESInitEnrollee() API
[platform/upstream/iotivity.git] / service / easy-setup / enrollee / src / easysetup.c
1 //******************************************************************
2 //
3 // Copyright 2015 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 for EasySetup Enrollee device
25  */
26
27 #include "easysetup.h"
28 #include "logger.h"
29 #include "resourcehandler.h"
30 #include "easysetupcallbacks.h"
31
32 /**
33  * @var ES_ENROLLEE_TAG
34  * @brief Logging tag for module name.
35  */
36 #define ES_ENROLLEE_TAG "ES"
37
38 //-----------------------------------------------------------------------------
39 // Private variables
40 //-----------------------------------------------------------------------------
41 static bool gIsSecured = false;
42
43 static ESProvisioningCallbacks gESProvisioningCb;
44
45 void ESWiFiRsrcCallback(ESResult esResult, ESWiFiProvData *eventData)
46 {
47     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESWiFiRsrcCallback IN");
48
49     if(esResult != ES_OK)
50     {
51         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESWiFiRsrcCallback Error Occured");
52         return;
53     }
54
55     // deliver data to ESProvisioningCallbacks
56     if(gESProvisioningCb.WiFiProvCb != NULL)
57     {
58         gESProvisioningCb.WiFiProvCb(eventData);
59     }
60     else
61     {
62         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "WiFiProvCb is NULL");
63         return;
64     }
65 }
66
67 void ESCloudRsrcCallback(ESResult esResult, ESCloudProvData *eventData)
68 {
69     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESCloudRsrcCallback IN");
70
71     if(esResult != ES_OK)
72     {
73         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESCloudRsrcCallback Error Occured");
74         return;
75     }
76
77     if(gESProvisioningCb.CloudDataProvCb != NULL)
78     {
79         gESProvisioningCb.CloudDataProvCb(eventData);
80     }
81     else
82     {
83         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "CloudDataProvCb is NULL");
84         return;
85     }
86 }
87
88 void ESDevconfRsrcallback(ESResult esResult, ESDevConfProvData *eventData)
89 {
90     OIC_LOG_V(DEBUG, ES_ENROLLEE_TAG, "ESDevconfRsrcallback IN");
91
92     if(esResult != ES_OK)
93     {
94         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "ESDevconfRsrcallback Error Occured");
95         return;
96     }
97
98     if(gESProvisioningCb.DevConfProvCb != NULL)
99     {
100         gESProvisioningCb.DevConfProvCb(eventData);
101     }
102     else
103     {
104         OIC_LOG_V(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb is NULL");
105         return;
106     }
107 }
108
109 ESResult ESInitEnrollee(bool isSecured, ESResourceMask resourceMask, ESProvisioningCallbacks callbacks)
110 {
111     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee IN");
112
113     gIsSecured = isSecured;
114
115     if((resourceMask & ES_WIFI_RESOURCE) == ES_WIFI_RESOURCE)
116     {
117         if(callbacks.WiFiProvCb != NULL)
118         {
119             gESProvisioningCb.WiFiProvCb = callbacks.WiFiProvCb;
120             RegisterWifiRsrcEventCallBack(ESWiFiRsrcCallback);
121         }
122         else
123         {
124             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "WiFiProvCb NULL");
125             return ES_ERROR;
126         }
127     }
128     if((resourceMask & ES_DEVCONF_RESOURCE) == ES_DEVCONF_RESOURCE)
129     {
130         if(callbacks.DevConfProvCb != NULL)
131         {
132             gESProvisioningCb.DevConfProvCb = callbacks.DevConfProvCb;
133             RegisterDevConfRsrcEventCallBack(ESDevconfRsrcallback);
134         }
135         else
136         {
137             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "DevConfProvCb NULL");
138             return ES_ERROR;
139         }
140     }
141     if((resourceMask & ES_CLOUD_RESOURCE) == ES_CLOUD_RESOURCE)
142     {
143         if(callbacks.DevConfProvCb != NULL)
144         {
145             gESProvisioningCb.CloudDataProvCb = callbacks.CloudDataProvCb;
146             RegisterCloudRsrcEventCallBack(ESCloudRsrcCallback);
147         }
148         else
149         {
150             OIC_LOG(ERROR, ES_ENROLLEE_TAG, "CloudDataProvCb NULL");
151             return ES_ERROR;
152         }
153     }
154
155     if(CreateEasySetupResources(gIsSecured, resourceMask) != OC_STACK_OK)
156     {
157         // TODO : Error Handling
158         return ES_ERROR;
159     }
160
161
162     OIC_LOG(INFO, ES_ENROLLEE_TAG, "ESInitEnrollee OUT");
163     return ES_OK;
164 }
165
166 ESResult ESTerminateEnrollee()
167 {
168     UnRegisterResourceEventCallBack();
169
170     //Delete Prov resource
171     if (DeleteEasySetupResources() != OC_STACK_OK)
172     {
173         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "Deleting prov resource error!!");
174         return ES_ERROR;
175     }
176
177     OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESTerminateEnrollee success");
178     return ES_OK;
179 }
180
181 static bool ESEnrolleeValidateParam(OCConnectivityType networkType, const char *ssid,
182                                                 const char *passwd, ESEnrolleeEventCallback cb)
183 {
184     if (!ssid || !passwd || !cb)
185     {
186         OIC_LOG(ERROR, ES_ENROLLEE_TAG, "ESEnrolleeValidateParam - Invalid parameters");
187         return false;
188     }
189     return true;
190 }
191