Multiple Ownership Transfer support.
[platform/upstream/iotivity.git] / resource / csdk / security / include / internal / doxmresource.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_DOXM_H
22 #define IOTVT_SRM_DOXM_H
23
24 #include "octypes.h"
25 #ifdef _ENABLE_MULTIPLE_OWNER_
26 #include "cacommon.h"
27 #endif //_ENABLE_MULTIPLE_OWNER_
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 /**
34  * Initialize DOXM resource by loading data from persistent storage.
35  *
36  * @return ::OC_STACK_OK for Success, otherwise some error value.
37  */
38 OCStackResult InitDoxmResource();
39
40 /**
41  * Perform cleanup for DOXM resources.
42  *
43  * @return ::OC_STACK_OK for Success, otherwise some error value.
44  */
45 OCStackResult DeInitDoxmResource();
46
47 /**
48  * This method is used by SRM to retrieve DOXM resource data..
49  *
50  * @return reference to @ref OicSecDoxm_t, binary format of Doxm resource data.
51  */
52 const OicSecDoxm_t* GetDoxmResourceData();
53
54 /**
55  * This method converts CBOR DOXM into binary DOXM.
56  * The CBOR DOXM can be from persistent database or
57  * or received as PUT/POST request.
58  *
59  * @param cborPayload is a doxm data in cbor.
60  * @note Caller needs to invoke OCFree after done using the return pointer.
61  * @param doxm is the pointer to @ref OicSecDoxm_t.
62  * @param size of the cborPayload. In case value is 0, CBOR_SIZE value is assigned.
63  *
64  * @return ::OC_STACK_OK for Success, otherwise some error value.
65  */
66 OCStackResult CBORPayloadToDoxm(const uint8_t *cborPayload, size_t size,
67                                 OicSecDoxm_t **doxm);
68
69 /**
70  * This method converts DOXM data into CBOR format.
71  * Caller needs to invoke 'free' when finished done using
72  * return string.
73  *
74  * @param doxm Pointer to @ref OicSecDoxm_t.
75  * @note Caller needs to invoke OCFree after done using the return pointer.
76  * @param cborPayload is the payload of the cbor.
77  * @param cborSize is the size of the cbor payload. Passed parameter should not be NULL.
78  * @param rwOnly indicates whether convertingpayload has all properties or read-write properties only.
79  *
80  * @return ::OC_STACK_OK for Success, otherwise some error value.
81  */
82 OCStackResult DoxmToCBORPayload(const OicSecDoxm_t * doxm, uint8_t **cborPayload,
83                                 size_t *cborSize, bool rwOnly);
84
85 /**
86  * This method returns the SRM device ID for this device.
87  *
88  * @return ::OC_STACK_OK for Success, otherwise some error value.
89  */
90 OCStackResult GetDoxmDeviceID(OicUuid_t *deviceID);
91
92 /**
93  * This method changes the SRM device ID for this device.
94  * This api will update device Id iff device is in unowned state.
95  * @return ::OC_STACK_OK for Success, otherwise some error value.
96  */
97 OCStackResult SetDoxmDeviceID(const OicUuid_t *deviceID);
98
99
100 /**
101  * Gets the OicUuid_t value for the owner of this device.
102  *
103  * @param devownerid a pointer to be assigned to the devownerid property
104  * @return ::OC_STACK_OK if devownerid is assigned correctly, else ::OC_STACK_ERROR.
105  */
106 OCStackResult GetDoxmDevOwnerId(OicUuid_t *devownerid);
107
108 /**
109  * Gets the bool state of "isOwned" property on the doxm resource.
110  *
111  * @param isOwned a pointer to be assigned to isOwned property
112  * @return ::OC_STACK_OK if isOwned is assigned correctly, else ::OC_STACK_ERROR.
113  */
114 OCStackResult GetDoxmIsOwned(bool *isOwned);
115
116 /**
117  * Gets the OicUuid_t value for the rowneruuid of the doxm resource.
118  *
119  * @param rowneruuid a pointer to be assigned to the rowneruuid property
120  * @return ::OC_STACK_OK if rowneruuid is assigned correctly, else ::OC_STACK_ERROR.
121  */
122 OCStackResult GetDoxmRownerId(OicUuid_t *rowneruuid);
123
124 #ifdef _ENABLE_MULTIPLE_OWNER_
125 /**
126  * Compare the UUID to SubOwner.
127  *
128  * @param[in] uuid device UUID
129  *
130  * @return true if uuid exists in the SubOwner list of doxm, else false.
131  */
132 bool IsSubOwner(const OicUuid_t* uuid);
133 #endif //_ENABLE_MULTIPLE_OWNER_
134
135 /** This function deallocates the memory for OicSecDoxm_t .
136  *
137  * @param doxm is the pointer to @ref OicSecDoxm_t.
138  */
139 void DeleteDoxmBinData(OicSecDoxm_t* doxm);
140
141 /**
142  * Function to restore doxm resurce to initial status.
143  * This function will use in case of error while ownership transfer
144  */
145 void RestoreDoxmToInitState();
146
147 #if defined(__WITH_DTLS__) && defined(_ENABLE_MULTIPLE_OWNER_)
148 /**
149  * Callback function to handle MOT DTLS handshake result.
150  * @param[out]   object           remote device information.
151  * @param[out]   errorInfo        CA Error information.
152  */
153 void MultipleOwnerDTLSHandshakeCB(const CAEndpoint_t *object,
154                                 const CAErrorInfo_t *errorInfo);
155 #endif //__WITH_DTLS__ && _ENABLE_MULTIPLE_OWNER_
156
157 #ifdef __cplusplus
158 }
159 #endif
160
161 #endif //IOTVT_SRM_DOXMR_H