66b399c1580c77b8652b918fc1b88f62155fad49
[platform/upstream/iotivity.git] / resource / csdk / security / include / internal / policyengine.h
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 #ifndef IOTVT_SRM_PE_H
22 #define IOTVT_SRM_PE_H
23
24 #include "ocstack.h"
25 #include "logger.h"
26 #include "securevirtualresourcetypes.h"
27 #include "cainterface.h"
28 #include "amsmgr.h"
29 #include <stdlib.h>
30 #include <stdint.h>
31
32 typedef struct AmsMgrContext AmsMgrContext_t;
33
34 typedef enum PEState
35 {
36     STOPPED = 0,              //Policy engine state machine is not running
37     AWAITING_REQUEST,         //Can process new request
38     AWAITING_AMS_RESPONSE,    //Can't process new request; waiting for AMS response
39     BUSY                      //Can't process new request as processing other requests
40 } PEState_t;
41
42 typedef struct PEContext
43 {
44     PEState_t   state;
45     OicUuid_t   subject;
46     char        resource[MAX_URI_LENGTH];
47     OicSecSvrType_t resourceType;
48     uint16_t    permission;
49     bool        amsProcessing;
50     SRMAccessResponse_t retVal;
51     AmsMgrContext_t     *amsMgrContext;
52
53 #ifdef _ENABLE_MULTIPLE_OWNER_
54     uint8_t* payload;
55     size_t payloadSize;
56 #endif //_ENABLE_MULTIPLE_OWNER_
57 } PEContext_t;
58
59 /**
60  * Check whether a request should be allowed.
61  *
62  * @param context is the pointer to Policy Engine context to use.
63  * @param subjectId is the pointer to Id of the requesting entity.
64  * @param resource is the pointer to URI of Resource being requested.
65  * @param permission is the requested permission.
66  *
67  * @return ::ACCESS_GRANTED if request should go through, otherwise some flavor of ACCESS_DENIED.
68  */
69 SRMAccessResponse_t CheckPermission(
70     PEContext_t     *context,
71     const OicUuid_t *subjectId,
72     const char      *resource,
73     const uint16_t  requestedPermission);
74
75 /**
76  * Initialize the Policy Engine. Call this before calling CheckPermission().
77  * TODO Eventually this and DeInit() need to be called from a new
78  *      "SRMInit(SRMContext_t *)" function, TBD after BeachHead.
79  * @param context is the pointer to Policy Engine context to initialize.
80  *
81  * @return ::OC_STACK_OK for Success, otherwise some error value.
82  */
83 OCStackResult InitPolicyEngine(PEContext_t *context);
84
85 /**
86  * De-Initialize the Policy Engine. Call this before exiting to allow Policy
87  * Engine to do cleanup on context.
88  *
89  * @param context is the pointer to Policy Engine context to de-initialize.
90  */
91 void DeInitPolicyEngine(PEContext_t *context);
92
93 /**
94  * Get CRUDN permission for a method.
95  *
96  * @param method is CRUDN permission being seeked.
97  *
98  * @return the uint16_t CRUDN permission .
99  */
100 uint16_t GetPermissionFromCAMethod_t(const CAMethod_t method);
101
102 /*
103  * This method reset Policy Engine context to default state and update
104  * it's state to @param state.
105  *
106  * @param context is the policy engine context.
107  * @param state set Policy engine state to this.
108  */
109 void SetPolicyEngineState(PEContext_t *context, const PEState_t state);
110
111 typedef OCStackResult (*GetSvrRownerId_t)(OicUuid_t *rowner);
112
113 #endif //IOTVT_SRM_PE_H