Imported Upstream version 1.2.0
[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 <coap/uri.h>
32 #ifdef __cplusplus
33 }
34 #endif
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif // __cplusplus
39
40 typedef struct OicParseQueryIter OicParseQueryIter_t;
41
42 /**
43  * 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  * Macro to verify success of operation.
60  * eg: VERIFY_SUCCESS(TAG, OC_STACK_OK == foo(), ERROR);
61  * @note Invoking function must define "exit:" label for goto functionality to work correctly.
62  */
63 #define VERIFY_SUCCESS(tag, op, logLevel) do{ if (!(op)) \
64             {OIC_LOG((logLevel), tag, #op " failed!!"); goto exit; } }while(0)
65
66 /**
67  * Macro to verify argument is not equal to NULL.
68  * eg: VERIFY_NON_NULL(TAG, ptrData, ERROR);
69  * @note Invoking function must define "exit:" label for goto functionality to work correctly.
70  */
71 #define VERIFY_NON_NULL(tag, arg, logLevel) do{ if (NULL == (arg)) \
72             { OIC_LOG((logLevel), tag, #arg " is NULL"); goto exit; } }while(0)
73
74 /**
75  * This method initializes the @ref OicParseQueryIter_t struct.
76  *
77  * @param query is the REST query, to be parsed.
78  * @param parseIter is the @ref OicParseQueryIter_t struct, to be initialized based on the query.
79  */
80 void ParseQueryIterInit(const unsigned char * query, OicParseQueryIter_t * parseIter);
81
82 /**
83  * This method fills the @ref OicParseQueryIter_t struct with next REST query's
84  * attribute's and value's information.
85  *
86  * @param parseIter is the @ref OicParseQueryIter_t struct, has next query's attribute's
87  *  & value's info.
88  *
89  * @return reference to the @ref OicParseQueryIter_t if it has parsed query info, else
90  * NULL if it has no query to parse.
91  */
92 OicParseQueryIter_t * GetNextQuery(OicParseQueryIter_t * parseIter);
93
94 /**
95  * This method acts as a helper function for JSON unmarshalling by various SVR's.
96  *
97  * @param jsonRoot point to the root JSON node containing the OicUuid array.
98  * @param arrayItem is the name of the JSON OicUuid array item.
99  * @param numUuids is the pointer to the number of OicUuid's available in JSON array.
100  * @param uuids is the pointer to the array of OicUuid's.
101  *
102  * @return ::OC_STACK_OK on success, some other value upon failure.
103  */
104 OCStackResult AddUuidArray(const cJSON* jsonRoot, const char* arrayItem,
105                            size_t *numUuids, OicUuid_t** uuids);
106
107 /**
108  * Function to getting string of ownership transfer method
109  *
110  * @prarm oxmType ownership transfer method
111  *
112  * @return string value of ownership transfer method
113  */
114 const char* GetOxmString(OicSecOxm_t oxmType);
115
116 /*
117  * This method converts UUID to canonical format string.
118  *
119  * @param uuid Device UUID
120  * @param strUuid converted UUID in canonical format
121  * @return OC_STACK_OK for success.
122  *
123  * @note Caller needs to invoke OICFree after done using the return pointer
124  */
125 OCStackResult ConvertUuidToStr(const OicUuid_t* uuid, char** strUuid);
126
127
128 /*
129  * This method converts string UUID to OicUuid_t.
130  *
131  * @param strUuid Device UUID in string format
132  * @param uuid converted UUID in OicUuid_t format
133  * @return OC_STACK_OK for success.
134  *
135  */
136 OCStackResult ConvertStrToUuid(const char* strUuid, OicUuid_t* uuid);
137
138
139 #ifdef __cplusplus
140 }
141 #endif // __cplusplus
142
143 #endif //IOTVT_SRM_UTILITY_H