Add oic/sec/amacl to support SVR types
[platform/upstream/iotivity.git] / resource / csdk / security / src / resourcemanager.c
1 //******************************************************************
2 //
3 // Copyright 2015 Intel Mobile Communications GmbH 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 "resourcemanager.h"
22 #include "securevirtualresourcetypes.h"
23 #include "aclresource.h"
24 #include "pstatresource.h"
25 #include "doxmresource.h"
26 #include "credresource.h"
27 #include "amaclresource.h"
28 #include "oic_malloc.h"
29 #include "logger.h"
30 #include "utlist.h"
31 #include <string.h>
32
33 #define TAG PCF("SRM-RM")
34
35 /**
36  * This method is used by all secure resource modules to send responses to REST queries.
37  *
38  * @param ehRequest pointer to entity handler request data structure.
39  * @param ehRet result code from entity handler.
40  * @param rspPayload response payload in JSON.
41  *
42  * @retval  OC_STACK_OK for Success, otherwise some error value
43  */
44 OCStackResult SendSRMResponse(const OCEntityHandlerRequest *ehRequest,
45         OCEntityHandlerResult ehRet, const char *rspPayload)
46 {
47     OC_LOG (INFO, TAG, PCF("SRM sending SRM response"));
48     OCEntityHandlerResponse response = {};
49     if (ehRequest)
50     {
51         response.requestHandle = ehRequest->requestHandle;
52         response.resourceHandle = ehRequest->resource;
53         response.ehResult = ehRet;
54         response.payload = (char *)rspPayload;
55         response.payloadSize = (rspPayload ? strlen(rspPayload) : 0);
56         response.persistentBufferFlag = 0;
57
58         return OCDoResponse(&response);
59     }
60     return OC_STACK_ERROR;
61 }
62
63 /**
64  * Initialize all secure resources ( /oic/sec/cred, /oic/sec/acl, /oic/sec/pstat etc).
65  *
66  * @retval  OC_STACK_OK for Success, otherwise some error value
67  */
68 OCStackResult InitSecureResources( )
69 {
70     OCStackResult ret;
71
72     /*
73      * doxm resource should be initialized first as it contains the DeviceID
74      * which MAY be used during initialization of other resources.
75      */
76
77     ret = InitDoxmResource();
78
79     if(OC_STACK_OK == ret)
80     {
81         ret = InitPstatResource();
82     }
83     if(OC_STACK_OK == ret)
84     {
85         ret = InitACLResource();
86     }
87     if(OC_STACK_OK == ret)
88     {
89         ret = InitCredResource();
90     }
91     if(OC_STACK_OK == ret)
92     {
93         ret = InitAmaclResource();
94     }
95     if(OC_STACK_OK != ret)
96     {
97         //TODO: Update the default behavior if one of the SVR fails
98         DestroySecureResources();
99     }
100     return ret;
101 }
102
103 /**
104  * Perform cleanup for secure resources ( /oic/sec/cred, /oic/sec/acl, /oic/sec/pstat etc).
105  *
106  * @retval  OC_STACK_OK for Success, otherwise some error value
107  */
108 OCStackResult DestroySecureResources( )
109 {
110     DeInitACLResource();
111     DeInitCredResource();
112     DeInitDoxmResource();
113     DeInitPstatResource();
114
115     return OC_STACK_OK;
116 }