ACL payload conversion from JSON to CBOR
[platform/upstream/iotivity.git] / resource / csdk / security / include / srmutility.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_UTILITY_H
22 #define IOTVT_SRM_UTILITY_H
23
24 #include "ocstack.h"
25 #include "cJSON.h"
26 #include "securevirtualresourcetypes.h"
27 #ifdef __cplusplus
28 extern "C"
29 {
30 #endif
31 #include "uri.h"
32 #ifdef __cplusplus
33 }
34 #endif
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif // __cplusplus
39
40
41 typedef struct OicParseQueryIter OicParseQueryIter_t;
42
43 /**
44  * OicRestQueryIter data structure is used for book-keeping
45  * sub-REST query's attribute's and value's, starting location &
46  * length between calls to GetNextQuery(). This struct needs
47  * to be first initialized with ParseQueryIterInit().
48  *
49  */
50 struct OicParseQueryIter
51 {
52     unsigned char * attrPos;    /**<stating location of attribute */
53     size_t attrLen;             /**<length of the attribute */
54     unsigned char * valPos;     /**<starting location of value*/
55     size_t valLen;              /**<length of the value*/
56     coap_parse_iterator_t pi;   /**<coap struct for tokenizing the query*/
57 };
58
59 /**
60  * Macro to verify success of operation.
61  * eg: VERIFY_SUCCESS(TAG, OC_STACK_OK == foo(), ERROR);
62  * @note Invoking function must define "exit:" label for goto functionality to work correctly.
63  *
64  */
65 #define VERIFY_SUCCESS(tag, op, logLevel) do{ if (!(op)) \
66             {OIC_LOG((logLevel), tag, #op " failed!!"); goto exit; } }while(0)
67
68 /**
69  * VERIFY_NON_NULL
70  * Macro to verify argument is not equal to NULL.
71  * eg: VERIFY_NON_NULL(TAG, ptrData, ERROR);
72  * @note Invoking function must define "exit:" label for goto functionality to work correctly.
73  *
74  */
75 #define VERIFY_NON_NULL(tag, arg, logLevel) do{ if (NULL == (arg)) \
76             { OIC_LOG((logLevel), tag, #arg " is NULL"); goto exit; } }while(0)
77
78 /**
79  * This method initializes the OicParseQueryIter_t struct
80  *
81  * @param query     - REST query, to be parsed
82  * @param parseIter - OicParseQueryIter_t struct, to be initialized
83  *
84  */
85 void ParseQueryIterInit(unsigned char * query, OicParseQueryIter_t * parseIter);
86
87 /**
88  * This method fills the OicParseQueryIter_t struct with next REST query's
89  * attribute's and value's information
90  *
91  * @param parseIter - OicParseQueryIter_t struct, has next query's attribute's & value's info
92  *
93  * @return reference to @ref OicParseQueryIter_t with parsed query info or NULL has no query to parse.
94  */
95 OicParseQueryIter_t * GetNextQuery(OicParseQueryIter_t * parseIter);
96
97 /**
98  * This method acts as a helper funtion for JSON unmarshalling by various SVR's.
99  *
100  * @param jsonRoot  - root JSON node containing the OicUuid array
101  * @param arrayItem - name of the JSON OicUuid array item
102  * @param numUuids  - pointer to the number of OicUuid's available in JSON array
103  * @param uuids     - pointer to the array of OicUuid's
104  *
105  * @return ::OC_STACK_OK on success, some other value upon failure.
106  */
107 OCStackResult AddUuidArray(cJSON* jsonRoot, const char* arrayItem,
108                            size_t *numUuids, OicUuid_t** uuids );
109
110 /**
111  * Function to getting string of ownership transfer method
112  *
113  * @prarm oxmType ownership transfer method
114  *
115  * @return string value of ownership transfer method
116  */
117 const char* GetOxmString(OicSecOxm_t oxmType);
118
119 #ifdef __cplusplus
120 }
121 #endif // __cplusplus
122
123 #endif //IOTVT_SRM_UTILITY_H