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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #ifndef __STDC_FORMAT_MACROS
25 #define __STDC_FORMAT_MACROS
27 #ifndef __STDC_LIMIT_MACROS
28 #define __STDC_LIMIT_MACROS
40 * Macro to verify the validity of cbor operation.
42 #define VERIFY_CBOR_SUCCESS(log_tag, err, log_message) \
43 if ((CborNoError != (err)) && (CborErrorOutOfMemory != (err))) \
45 if ((log_tag) && (log_message)) \
47 OIC_LOG_V(ERROR, (log_tag), "%s with cbor error: \'%s\'.", \
48 (log_message), (cbor_error_string(err))); \
53 #define VERIFY_PARAM_NON_NULL(log_tag, err, log_message) \
56 OIC_LOG_V(FATAL, (log_tag), "%s", (log_message)); \
61 typedef struct OCResource OCResource;
63 OC_EXPORT void OCPayloadDestroy(OCPayload* payload);
65 // Representation Payload
66 OC_EXPORT OCRepPayload* OCRepPayloadCreate();
68 OC_EXPORT size_t calcDimTotal(const size_t dimensions[MAX_REP_ARRAY_DEPTH]);
70 OC_EXPORT OCRepPayload* OCRepPayloadClone(const OCRepPayload* payload);
72 OC_EXPORT void OCRepPayloadAppend(OCRepPayload* parent, OCRepPayload* child);
74 OC_EXPORT bool OCRepPayloadSetUri(OCRepPayload* payload, const char* uri);
76 OC_EXPORT bool OCRepPayloadAddResourceType(OCRepPayload* payload, const char* resourceType);
77 OC_EXPORT bool OCRepPayloadAddInterface(OCRepPayload* payload, const char* iface);
78 OC_EXPORT bool OCRepPayloadAddModelVersion(OCRepPayload* payload, const char* dmv);
80 OC_EXPORT bool OCRepPayloadAddResourceTypeAsOwner(OCRepPayload* payload, char* resourceType);
81 OC_EXPORT bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* iface);
83 OC_EXPORT bool OCRepPayloadIsNull(const OCRepPayload* payload, const char* name);
84 OC_EXPORT bool OCRepPayloadSetNull(OCRepPayload* payload, const char* name);
86 OC_EXPORT bool OCRepPayloadSetPropInt(OCRepPayload* payload, const char* name, int64_t value);
87 OC_EXPORT bool OCRepPayloadGetPropInt(const OCRepPayload* payload, const char* name, int64_t* value);
89 OC_EXPORT bool OCRepPayloadSetPropDouble(OCRepPayload* payload, const char* name, double value);
90 OC_EXPORT bool OCRepPayloadGetPropDouble(const OCRepPayload* payload, const char* name, double* value);
93 * This function allocates memory for the byte string and sets it in the payload.
95 * @param payload Pointer to the payload to which byte string needs to be added.
96 * @param name Name of the byte string.
97 * @param value Byte string and it's length.
99 * @return true on success, false upon failure.
101 OC_EXPORT bool OCRepPayloadSetPropByteString(OCRepPayload* payload, const char* name, OCByteString value);
104 * This function sets the byte string in the payload.
106 * @param payload Pointer to the payload to which byte string needs to be added.
107 * @param name Name of the byte string.
108 * @param value Byte string and it's length.
110 * @return true on success, false upon failure.
112 OC_EXPORT bool OCRepPayloadSetPropByteStringAsOwner(OCRepPayload* payload, const char* name,
113 OCByteString* value);
116 * This function gets the byte string from the payload.
118 * @param payload Pointer to the payload from which byte string needs to be retrieved.
119 * @param name Name of the byte string.
120 * @param value Byte string and it's length.
122 * @note: Caller needs to invoke OCFree on value.bytes after it is finished using the byte string.
124 * @return true on success, false upon failure.
126 OC_EXPORT bool OCRepPayloadGetPropByteString(const OCRepPayload* payload, const char* name,
127 OCByteString* value);
129 OC_EXPORT bool OCRepPayloadSetPropString(OCRepPayload* payload, const char* name, const char* value);
130 OC_EXPORT bool OCRepPayloadSetPropStringAsOwner(OCRepPayload* payload, const char* name, char* value);
131 OC_EXPORT bool OCRepPayloadGetPropString(const OCRepPayload* payload, const char* name, char** value);
133 OC_EXPORT bool OCRepPayloadSetPropBool(OCRepPayload* payload, const char* name, bool value);
134 OC_EXPORT bool OCRepPayloadGetPropBool(const OCRepPayload* payload, const char* name, bool* value);
136 OC_EXPORT bool OCRepPayloadSetPropObject(OCRepPayload* payload, const char* name, const OCRepPayload* value);
137 OC_EXPORT bool OCRepPayloadSetPropObjectAsOwner(OCRepPayload* payload, const char* name, OCRepPayload* value);
138 OC_EXPORT bool OCRepPayloadGetPropObject(const OCRepPayload* payload, const char* name, OCRepPayload** value);
141 * This function allocates memory for the byte string array and sets it in the payload.
143 * @param payload Pointer to the payload to which byte string array needs to be added.
144 * @param name Name of the byte string.
145 * @param array Byte string array.
146 * @param dimensions Number of byte strings in above array.
148 * @return true on success, false upon failure.
150 OC_EXPORT bool OCRepPayloadSetByteStringArrayAsOwner(OCRepPayload* payload, const char* name,
151 OCByteString* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
154 * This function sets the byte string array in the payload.
156 * @param payload Pointer to the payload to which byte string array needs to be added.
157 * @param name Name of the byte string.
158 * @param array Byte string array.
159 * @param dimensions Number of byte strings in above array.
161 * @return true on success, false upon failure.
163 OC_EXPORT bool OCRepPayloadSetByteStringArray(OCRepPayload* payload, const char* name,
164 const OCByteString* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
167 * This function gets the byte string array from the payload.
169 * @param payload Pointer to the payload from which byte string array needs to be retrieved.
170 * @param name Name of the byte string array.
171 * @param value Byte string array.
172 * @param dimensions Number of byte strings in above array.
174 * @note: Caller needs to invoke OICFree on 'bytes' field of all array elements after it is
175 * finished using the byte string array.
177 * @return true on success, false upon failure.
179 OC_EXPORT bool OCRepPayloadGetByteStringArray(const OCRepPayload* payload, const char* name,
180 OCByteString** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
182 OC_EXPORT bool OCRepPayloadSetIntArrayAsOwner(OCRepPayload* payload, const char* name,
183 int64_t* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
184 OC_EXPORT bool OCRepPayloadSetIntArray(OCRepPayload* payload, const char* name,
185 const int64_t* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
186 OC_EXPORT bool OCRepPayloadGetIntArray(const OCRepPayload* payload, const char* name,
187 int64_t** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
189 OC_EXPORT bool OCRepPayloadSetDoubleArrayAsOwner(OCRepPayload* payload, const char* name,
190 double* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
191 OC_EXPORT bool OCRepPayloadSetDoubleArray(OCRepPayload* payload, const char* name,
192 const double* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
193 OC_EXPORT bool OCRepPayloadGetDoubleArray(const OCRepPayload* payload, const char* name,
194 double** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
196 OC_EXPORT bool OCRepPayloadSetStringArrayAsOwner(OCRepPayload* payload, const char* name,
197 char** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
198 OC_EXPORT bool OCRepPayloadSetStringArray(OCRepPayload* payload, const char* name,
199 const char** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
200 OC_EXPORT bool OCRepPayloadGetStringArray(const OCRepPayload* payload, const char* name,
201 char*** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
203 OC_EXPORT bool OCRepPayloadSetBoolArrayAsOwner(OCRepPayload* payload, const char* name,
204 bool* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
205 OC_EXPORT bool OCRepPayloadSetBoolArray(OCRepPayload* payload, const char* name,
206 const bool* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
207 OC_EXPORT bool OCRepPayloadGetBoolArray(const OCRepPayload* payload, const char* name,
208 bool** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
210 OC_EXPORT bool OCRepPayloadSetPropObjectArrayAsOwner(OCRepPayload* payload, const char* name,
211 OCRepPayload** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
212 OC_EXPORT bool OCRepPayloadSetPropObjectArray(OCRepPayload* payload, const char* name,
213 const OCRepPayload** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
214 OC_EXPORT bool OCRepPayloadGetPropObjectArray(const OCRepPayload* payload, const char* name,
215 OCRepPayload*** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
217 OC_EXPORT void OCRepPayloadDestroy(OCRepPayload* payload);
220 OC_EXPORT OCDiscoveryPayload* OCDiscoveryPayloadCreate();
222 OC_EXPORT OCSecurityPayload* OCSecurityPayloadCreate(const uint8_t* securityData, size_t size);
223 OC_EXPORT void OCSecurityPayloadDestroy(OCSecurityPayload* payload);
226 OC_EXPORT void OCDiscoveryPayloadAddResource(OCDiscoveryPayload* payload, const OCResource* res,
227 uint16_t securePort);
229 OC_EXPORT void OCDiscoveryPayloadAddResource(OCDiscoveryPayload* payload, const OCResource* res,
230 uint16_t securePort, uint16_t tcpPort);
232 OC_EXPORT void OCDiscoveryPayloadAddNewResource(OCDiscoveryPayload* payload, OCResourcePayload* res);
233 OC_EXPORT bool OCResourcePayloadAddStringLL(OCStringLL **payload, const char* type);
235 OC_EXPORT size_t OCDiscoveryPayloadGetResourceCount(OCDiscoveryPayload* payload);
236 OC_EXPORT OCResourcePayload* OCDiscoveryPayloadGetResource(OCDiscoveryPayload* payload, size_t index);
238 OC_EXPORT void OCDiscoveryResourceDestroy(OCResourcePayload* payload);
239 OC_EXPORT void OCDiscoveryPayloadDestroy(OCDiscoveryPayload* payload);
242 OC_EXPORT OCDevicePayload* OCDevicePayloadCreate(const char* sid, const char* dname,
243 const OCStringLL *types, const char* specVer, const char* dmVer);
244 OC_EXPORT void OCDevicePayloadDestroy(OCDevicePayload* payload);
247 OC_EXPORT OCPlatformPayload* OCPlatformPayloadCreate(const OCPlatformInfo* platformInfo);
248 OC_EXPORT OCPlatformPayload* OCPlatformPayloadCreateAsOwner(OCPlatformInfo* platformInfo);
249 OC_EXPORT void OCPlatformInfoDestroy(OCPlatformInfo *info);
250 OC_EXPORT void OCPlatformPayloadDestroy(OCPlatformPayload* payload);
253 OC_EXPORT OCPresencePayload* OCPresencePayloadCreate(uint32_t seqNum, uint32_t maxAge,
254 OCPresenceTrigger trigger, const char* resourceType);
255 OC_EXPORT void OCPresencePayloadDestroy(OCPresencePayload* payload);
258 OC_EXPORT OCStringLL* CloneOCStringLL (OCStringLL* ll);
259 OC_EXPORT void OCFreeOCStringLL(OCStringLL* ll);
262 * This function creates a list from a string (with separated contents if several)
263 * @param text single string or CSV text fields
264 * @return newly allocated linked list
265 * @note separator is ',' (according to rfc4180, ';' is not valid)
267 OC_EXPORT OCStringLL* OCCreateOCStringLL(const char* text);
270 * This function creates a string from a list (with separated contents if several)
271 * @param ll Pointer to list
272 * @return newly allocated string
273 * @note separator is ',' (according to rfc4180)
275 OC_EXPORT char* OCCreateString(const OCStringLL* ll);