[IOT-789] [IOT-792] [IOT-794] [IOT-1763 partial fix]
[iotivity.git] / resource / csdk / security / include / internal / secureresourcemanager.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 SECURITYRESOURCEMANAGER_H_
22 #define SECURITYRESOURCEMANAGER_H_
23
24 #include "securevirtualresourcetypes.h"
25 #include "cainterface.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 typedef enum SubjectIdentityType
32 {
33     SUBJECT_ID_TYPE_ERROR = 0,
34     SUBJECT_ID_TYPE_UUID,     // Subject refers to a UUID
35     SUBJECT_ID_TYPE_ROLE,     // Subject refers to a Role
36 } SubjectIdentityType_t;
37
38 /**
39  * The context for a single request to be processed by the Security
40  * Resource Manager.
41  */
42 typedef struct SRMRequestContext
43 {
44     const CAEndpoint_t      *endPoint;                          // ptr to the Endpoint for this request
45     OicSecSvrType_t         resourceType;                       // SVR type (or "not an SVR")
46     char                    resourceUri[MAX_URI_LENGTH + 1];    // URI of the requested resource
47     uint16_t                requestedPermission;                // bitmask permissions of request
48     CAResponseInfo_t        responseInfo;                       // The response for this request
49     bool                    responseSent;                       // Is servicing this request complete?
50     SRMAccessResponse_t     responseVal;                        // The SRM internal response code
51     const CARequestInfo_t   *requestInfo;                       // ptr to info for this request
52     bool                    secureChannel;                      // Was request recv'd over secure channel?
53     bool                    slowResponseSent;                   // Is a full response still needed?
54     SubjectIdentityType_t   subjectIdType;                      // The type of Subject ID in this
55                                                                 // request.
56     OicUuid_t               subjectUuid;                        // The UUID of the Subject (valid
57                                                                 // iff IdType is UUID_TYPE).
58     // Developer note: when adding support for an additional type (e.g.
59     // ROLE_TYPE) suggest adding a new var to hold the Subject ID for that type.
60 #ifdef MULTIPLE_OWNER
61     uint8_t*                payload;
62     size_t                  payloadSize;
63 #endif //MULTIPLE_OWNER
64 } SRMRequestContext_t;
65
66 /**
67  * Register Persistent storage callback.
68  *
69  * @param  persistentStorageHandler [IN] Pointers to open, read, write, close & unlink handlers.
70  *
71  * @return ::OC_STACK_OK  is no errors and successful. ::OC_STACK_INVALID_PARAM for invalid parameter.
72  */
73 OCStackResult SRMRegisterPersistentStorageHandler(OCPersistentStorage* persistentStorageHandler);
74
75 /**
76  * Get Persistent storage handler pointer.
77  *
78  * @return The pointer to Persistent Storage callback handler.
79  */
80 OCPersistentStorage* SRMGetPersistentStorageHandler();
81
82 /**
83  * Register request and response callbacks. Requests and responses are delivered in these callbacks.
84  *
85  * @param reqHandler Request handler callback ( for GET,PUT ..etc)
86  * @param respHandler Response handler callback.
87  * @param errHandler Error handler callback.
88  *
89  * @return ::OC_STACK_OK  is no errors and successful. ::OC_STACK_INVALID_PARAM for invalid parameter.
90  */
91 OCStackResult SRMRegisterHandler(CARequestCallback reqHandler,
92                                  CAResponseCallback respHandler,
93                                  CAErrorCallback errHandler);
94
95 /**
96  * Initialize all secure resources ( /oic/sec/cred, /oic/sec/acl, /oic/sec/pstat etc).
97  * @return  ::OC_STACK_OK for Success, otherwise some error value.
98  */
99 OCStackResult SRMInitSecureResources();
100
101 /**
102  * Perform cleanup for secure resources ( /oic/sec/cred, /oic/sec/acl, /oic/sec/pstat etc).
103  */
104 void SRMDeInitSecureResources();
105
106 /**
107  * Provisioning API response callback.
108  *
109  * @param object endpoint instance.
110  * @param responseInfo instance of CAResponseInfo_t structure.
111  *
112  * @return true if received response is for provisioning API false otherwise.
113  */
114 typedef bool (*SPResponseCallback) (const CAEndpoint_t *object,
115                                     const CAResponseInfo_t *responseInfo);
116
117 /**
118  * Function to register provisoning API's response callback.
119  *
120  * @param respHandler response handler callback.
121  */
122 void SRMRegisterProvisioningResponseHandler(SPResponseCallback respHandler);
123
124 /**
125  * Check the security resource URI.
126  * @param uri Pointers to security resource URI.
127  * @return true if the URI is one of security resources, otherwise false.
128  */
129 bool SRMIsSecurityResourceURI(const char* uri);
130
131 /**
132  * Get the resource type from the URI.
133  * @param   uri [IN] Pointers to security resource URI.
134  * @return  SVR type (note that "NOT_A_SVR_RESOURCE" is returned if not a SVR)
135  */
136 OicSecSvrType_t GetSvrTypeFromUri(const char* uri);
137
138 #ifdef __cplusplus
139 }
140 #endif
141
142 #endif /* SECURITYRESOURCEMANAGER_H_ */