Imported Upstream version 0.9.2
[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 #ifdef __cplusplus
26 extern "C"
27 {
28 #endif
29 #include "uri.h"
30 #ifdef __cplusplus
31 }
32 #endif
33
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif // __cplusplus
38
39
40 typedef struct OicParseQueryIter OicParseQueryIter_t;
41
42 /**
43  * @brief   OicRestQueryIter data structure is used for book-keeping
44  *          sub-REST query's attribute's and value's, starting location &
45  *          length between calls to GetNextQuery(). This struct needs
46  *          to be first initialized with ParseQueryIterInit().
47  *
48  */
49 struct OicParseQueryIter
50 {
51     unsigned char * attrPos;    /**<stating location of attribute */
52     size_t attrLen;             /**<length of the attribute */
53     unsigned char * valPos;     /**<starting location of value*/
54     size_t valLen;              /**<length of the value*/
55     coap_parse_iterator_t pi;   /**<coap struct for tokenizing the query*/
56 };
57
58 /**
59  * @def VERIFY_SUCCESS
60  * @brief 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) { if (!(op)) \
66             {OC_LOG((logLevel), tag, PCF(#op " failed!!")); goto exit;} }
67
68 /**
69  * @def VERIFY_NON_NULL
70  * @brief 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) { if (NULL == (arg)) \
76             { OC_LOG((logLevel), tag, PCF(#arg " is NULL")); goto exit; } }
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 /**
89  * This method fills the OicParseQueryIter_t struct with next REST query's
90  * attribute's and value's information
91  *
92  *@param parseIter - OicParseQueryIter_t struct, has next query's attribute's & value's info
93  *
94  * @retval
95  *     OicParseQueryIter_t *  - has parsed query info
96  *     NULL                   - has no query to parse
97  */
98 OicParseQueryIter_t * GetNextQuery(OicParseQueryIter_t * parseIter);
99
100 #ifdef __cplusplus
101 }
102 #endif // __cplusplus
103
104 #endif //IOTVT_SRM_UTILITY_H