1 //******************************************************************
3 // Copyright 2015 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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
11 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #ifndef IOTVT_SRM_DOXM_H
22 #define IOTVT_SRM_DOXM_H
27 #endif //MULTIPLE_OWNER
34 * Initialize DOXM resource by loading data from persistent storage.
36 * @return ::OC_STACK_OK for Success, otherwise some error value.
38 OCStackResult InitDoxmResource();
41 * Perform cleanup for DOXM resources.
43 * @return ::OC_STACK_OK for Success, otherwise some error value.
45 OCStackResult DeInitDoxmResource();
48 * This method is used by SRM to retrieve DOXM resource data..
50 * @return reference to @ref OicSecDoxm_t, binary format of Doxm resource data.
52 const OicSecDoxm_t* GetDoxmResourceData();
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.
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.
64 * @return ::OC_STACK_OK for Success, otherwise some error value.
66 OCStackResult CBORPayloadToDoxm(const uint8_t *cborPayload, size_t size,
70 * This method converts DOXM data into CBOR format.
71 * Caller needs to invoke 'free' when finished done using
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.
80 * @return ::OC_STACK_OK for Success, otherwise some error value.
82 OCStackResult DoxmToCBORPayload(const OicSecDoxm_t * doxm, uint8_t **cborPayload,
83 size_t *cborSize, bool rwOnly);
85 #if defined(__WITH_DTLS__) || defined (__WITH_TLS__)
87 * API to save the seed value to generate device UUID.
89 * @param seed buffer of seed value.
90 * @param seedSize byte length of seed
92 * @return ::OC_STACK_OK for Success, otherwise some error value.
94 OCStackResult SetDoxmDeviceIDSeed(const uint8_t* seed, size_t seedSize);
98 * This method returns the SRM device ID for this device.
100 * @return ::OC_STACK_OK for Success, otherwise some error value.
102 OCStackResult GetDoxmDeviceID(OicUuid_t *deviceID);
105 * This method changes the SRM device ID for this device.
106 * This api will update device Id iff device is in unowned state.
107 * @return ::OC_STACK_OK for Success, otherwise some error value.
109 OCStackResult SetDoxmDeviceID(const OicUuid_t *deviceID);
113 * Gets the OicUuid_t value for the owner of this device.
115 * @param devownerid a pointer to be assigned to the devownerid property
116 * @return ::OC_STACK_OK if devownerid is assigned correctly, else ::OC_STACK_ERROR.
118 OCStackResult GetDoxmDevOwnerId(OicUuid_t *devownerid);
121 * Gets the bool state of "isOwned" property on the doxm resource.
123 * @param isOwned a pointer to be assigned to isOwned property
124 * @return ::OC_STACK_OK if isOwned is assigned correctly, else ::OC_STACK_ERROR.
126 OCStackResult GetDoxmIsOwned(bool *isOwned);
129 * Gets the OicUuid_t value for the rowneruuid of the doxm resource.
131 * @param rowneruuid a pointer to be assigned to the rowneruuid property
132 * @return ::OC_STACK_OK if rowneruuid is assigned correctly, else ::OC_STACK_ERROR.
134 OCStackResult GetDoxmRownerId(OicUuid_t *rowneruuid);
136 #ifdef MULTIPLE_OWNER
138 * Compare the UUID to SubOwner.
140 * @param[in] uuid device UUID
142 * @return true if uuid exists in the SubOwner list of doxm, else false.
144 bool IsSubOwner(const OicUuid_t* uuid);
145 #endif //MULTIPLE_OWNER
147 /** This function deallocates the memory for OicSecDoxm_t .
149 * @param doxm is the pointer to @ref OicSecDoxm_t.
151 void DeleteDoxmBinData(OicSecDoxm_t* doxm);
154 * Function to restore doxm resurce to initial status.
155 * This function will use in case of error while ownership transfer
157 void RestoreDoxmToInitState();
159 #if defined(__WITH_DTLS__) && defined(MULTIPLE_OWNER)
161 * Callback function to handle MOT DTLS handshake result.
162 * @param[out] object remote device information.
163 * @param[out] errorInfo CA Error information.
165 void MultipleOwnerDTLSHandshakeCB(const CAEndpoint_t *object,
166 const CAErrorInfo_t *errorInfo);
167 #endif //__WITH_DTLS__ && MULTIPLE_OWNER
170 * Internal function to change doxm resource to Ready for Normal Operation.
172 * @param newROwner new owner
174 * @retval ::OC_STACK_OK for Success, otherwise some error value
176 OCStackResult SetDoxmSelfOwnership(const OicUuid_t* newROwner);
179 * Function to set a MOT status
181 * @param enable whether the MOT is enabled. (true=enable, false=disable)
183 * @retval ::OC_STACK_OK for Success, otherwise some error value
185 OCStackResult SetMOTStatus(bool enable);
188 * Function to remove the Sub Owner (include ACL/Cred)
190 * @param subOwner UUID of Sub Owner to be removed.
192 * @retVal ::OC_STACK_OK for success, otherwise some error value.
194 OCStackResult RemoveSubOwner(const OicUuid_t* subOwner);
197 * Function to set a max number of sub owner.
199 * @param maxSubOwner Max number of sub owner.
201 * @retVal ::OC_STACK_OK for success, otherwise some error value.
203 OCStackResult SetNumberOfSubOwner(size_t maxSubOwner);
210 #endif //IOTVT_SRM_DOXMR_H