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_UTILITY_H
22 #define IOTVT_SRM_UTILITY_H
26 #include "securevirtualresourcetypes.h"
40 typedef struct OicParseQueryIter OicParseQueryIter_t;
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().
49 struct OicParseQueryIter
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.*/
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.
63 #define VERIFY_SUCCESS(tag, op, logLevel) do{ if (!(op)) \
64 {OIC_LOG((logLevel), tag, #op " failed!!"); goto exit; } }while(0)
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.
71 #define VERIFY_NON_NULL(tag, arg, logLevel) do{ if (NULL == (arg)) \
72 { OIC_LOG((logLevel), tag, #arg " is NULL"); goto exit; } }while(0)
75 * This method initializes the @ref OicParseQueryIter_t struct.
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.
80 void ParseQueryIterInit(const unsigned char * query, OicParseQueryIter_t * parseIter);
83 * This method fills the @ref OicParseQueryIter_t struct with next REST query's
84 * attribute's and value's information.
86 * @param parseIter is the @ref OicParseQueryIter_t struct, has next query's attribute's
89 * @return reference to the @ref OicParseQueryIter_t if it has parsed query info, else
90 * NULL if it has no query to parse.
92 OicParseQueryIter_t * GetNextQuery(OicParseQueryIter_t * parseIter);
95 * This method acts as a helper function for JSON unmarshalling by various SVR's.
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.
102 * @return ::OC_STACK_OK on success, some other value upon failure.
104 OCStackResult AddUuidArray(const cJSON* jsonRoot, const char* arrayItem,
105 size_t *numUuids, OicUuid_t** uuids);
108 * Function to getting string of ownership transfer method
110 * @prarm oxmType ownership transfer method
112 * @return string value of ownership transfer method
114 const char* GetOxmString(OicSecOxm_t oxmType);
117 * This method converts UUID to canonical format string.
119 * @param uuid Device UUID
120 * @param strUuid converted UUID in canonical format
121 * @return OC_STACK_OK for success.
123 * @note Caller needs to invoke OICFree after done using the return pointer
125 OCStackResult ConvertUuidToStr(const OicUuid_t* uuid, char** strUuid);
129 * This method converts string UUID to OicUuid_t.
131 * @param strUuid Device UUID in string format
132 * @param uuid converted UUID in OicUuid_t format
133 * @return OC_STACK_OK for success.
136 OCStackResult ConvertStrToUuid(const char* strUuid, OicUuid_t* uuid);
141 #endif // __cplusplus
143 #endif //IOTVT_SRM_UTILITY_H