Merge branch 'master' into extended-easysetup
[platform/upstream/iotivity.git] / service / easy-setup / mediator / richsdk / src / CloudResource.cpp
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 #include <functional>
22
23 #include "CloudResource.h"
24
25 #include "OCPlatform.h"
26 #include "ESException.h"
27 #include "OCResource.h"
28 #include "logger.h"
29
30 namespace OIC
31 {
32     namespace Service
33     {
34         #define ES_CLOUD_RES_TAG "ES_CLOUD_RESOURCE"
35
36         static const char ES_BASE_RES_URI[] = "/oic/res";
37
38         CloudResource::CloudResource(std::shared_ptr< OC::OCResource > resource)
39         {
40             m_ocResource = resource;
41         }
42
43         void CloudResource::provisionEnrollee(const CloudProp& cloudProp)
44         {
45             OIC_LOG_V (DEBUG, ES_CLOUD_RES_TAG, "Enter provisionEnrollee.");
46
47             OCRepresentation provisioningRepresentation = cloudProp.toOCRepresentation();
48
49             m_ocResource->post(OC_RSRVD_ES_RES_TYPE_PROV, BATCH_INTERFACE,
50                         provisioningRepresentation, QueryParamsMap(),
51                         std::function<
52                                 void(const HeaderOptions& headerOptions,
53                                         const OCRepresentation& rep, const int eCode) >(
54                         std::bind(&CloudResource::onCloudProvResponse, this,
55                         std::placeholders::_1, std::placeholders::_2,
56                         std::placeholders::_3)));
57         }
58
59         void CloudResource::onCloudProvResponse(const HeaderOptions& /*headerOptions*/,
60                 const OCRepresentation& rep, const int eCode)
61         {
62             OIC_LOG_V (DEBUG, ES_CLOUD_RES_TAG, "onCloudProvResponse : %s, eCode = %d",
63                     rep.getUri().c_str(), eCode);
64
65             if (eCode > OCStackResult::OC_STACK_RESOURCE_CHANGED)
66             {
67                 ESResult result  = ESResult::ES_ERROR;
68
69                 OIC_LOG(DEBUG, ES_CLOUD_RES_TAG,"onCloudProvResponse : onCloudProvResponse is failed ");
70
71                 if (eCode == OCStackResult::OC_STACK_UNAUTHORIZED_REQ)
72                 {
73                     OIC_LOG(DEBUG, ES_CLOUD_RES_TAG, "Mediator is unauthorized from Enrollee.");
74                     result = ESResult::ES_UNAUTHORIZED;
75                 }
76
77                 std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared<
78                         CloudPropProvisioningStatus >(result, ESCloudProvState::ES_CLOUD_PROVISIONING_ERROR);
79                 m_cloudPropProvStatusCb(provStatus);
80             }
81             else
82             {
83                 OIC_LOG(DEBUG, ES_CLOUD_RES_TAG,"onCloudProvResponse : onCloudProvResponse is success ");
84                 std::shared_ptr< CloudPropProvisioningStatus > provStatus = std::make_shared<
85                         CloudPropProvisioningStatus >(ESResult::ES_OK, ESCloudProvState::ES_CLOUD_PROVISIONING_SUCCESS);
86                 m_cloudPropProvStatusCb(provStatus);
87             }
88         }
89
90         void CloudResource::registerCloudPropProvisioningStatusCallback(CloudPropProvStatusCb callback)
91         {
92             OIC_LOG_V (DEBUG, ES_CLOUD_RES_TAG, "Enter registerCloudPropProvisioningStatusCallback.");
93             m_cloudPropProvStatusCb = callback;
94         }
95     }
96 }