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