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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
34 typedef struct OCResource OCResource;
37 #define OC_LOG_PAYLOAD(level, tag, payload) OCPayloadLog((level),(tag),(payload))
38 #define UUID_SIZE (16)
39 #define UUID_LENGTH (37)
40 const char *convertTriggerEnumToString(OCPresenceTrigger trigger);
41 OCPresenceTrigger convertTriggerStringToEnum(const char * triggerStr);
43 static inline void OCPayloadLogRep(LogLevel level, const char* tag, OCRepPayload* payload)
45 OC_LOG(level, tag, PCF("Payload Type: Representation"));
46 OCRepPayload* rep = payload;
50 OC_LOG_V(level, tag, "\tResource #%d", i);
51 OC_LOG_V(level, tag, "\tURL:%s", rep->uri);
52 OC_LOG(level, tag, PCF("\tResource Types:"));
53 OCStringLL* strll = rep->types;
56 OC_LOG_V(level, tag, "\t\t%s", strll->value);
59 OC_LOG(level, tag, PCF("\tInterfaces:"));
60 strll = rep->interfaces;
63 OC_LOG_V(level, tag, "\t\t%s", strll->value);
67 // TODO Finish Logging: Values
68 OCRepPayloadValue* val = rep->values;
70 OC_LOG(level, tag, PCF("\tValues:"));
77 OC_LOG_V(level, tag, "\t\t%s: NULL", val->name);
80 OC_LOG_V(level, tag, "\t\t%s(int):%lld", val->name, val->i);
82 case OCREP_PROP_DOUBLE:
83 OC_LOG_V(level, tag, "\t\t%s(double):%f", val->name, val->d);
86 OC_LOG_V(level, tag, "\t\t%s(bool):%s", val->name, val->b ? "true" : "false");
88 case OCREP_PROP_STRING:
89 OC_LOG_V(level, tag, "\t\t%s(string):%s", val->name, val->str);
91 case OCREP_PROP_OBJECT:
92 // Note: Only prints the URI (if available), to print further, you'll
93 // need to dig into the object better!
94 OC_LOG_V(level, tag, "\t\t%s(OCRep):%s", val->name, val->obj->uri);
96 case OCREP_PROP_ARRAY:
100 OC_LOG_V(level, tag, "\t\t%s(int array):%lld x %lld x %lld",
102 val->arr.dimensions[0], val->arr.dimensions[1],
103 val->arr.dimensions[2]);
105 case OCREP_PROP_DOUBLE:
106 OC_LOG_V(level, tag, "\t\t%s(double array):%lld x %lld x %lld",
108 val->arr.dimensions[0], val->arr.dimensions[1],
109 val->arr.dimensions[2]);
111 case OCREP_PROP_BOOL:
112 OC_LOG_V(level, tag, "\t\t%s(bool array):%lld x %lld x %lld",
114 val->arr.dimensions[0], val->arr.dimensions[1],
115 val->arr.dimensions[2]);
117 case OCREP_PROP_STRING:
118 OC_LOG_V(level, tag, "\t\t%s(string array):%lld x %lld x %lld",
120 val->arr.dimensions[0], val->arr.dimensions[1],
121 val->arr.dimensions[2]);
123 case OCREP_PROP_OBJECT:
124 OC_LOG_V(level, tag, "\t\t%s(OCRep array):%lld x %lld x %lld",
126 val->arr.dimensions[0], val->arr.dimensions[1],
127 val->arr.dimensions[2]);
130 OC_LOG_V(ERROR, tag, "\t\t%s <-- Unknown/unsupported array type!",
136 OC_LOG_V(ERROR, tag, "\t\t%s <-- Unknown type!", val->name);
148 static inline void OCPayloadLogDiscovery(LogLevel level, const char* tag,
149 OCDiscoveryPayload* payload)
151 OC_LOG(level, tag, PCF("Payload Type: Discovery"));
154 if(!payload->resources)
156 OC_LOG(level, tag, PCF("\tNO Resources"));
160 OCResourcePayload* res = payload->resources;
164 OC_LOG_V(level, tag, "\tResource #%d", i);
165 OC_LOG_V(level, tag, "\tURI:%s", res->uri);
166 OC_LOG(level, tag, PCF("\tSID:"));
167 OC_LOG_BUFFER(level, tag, res->sid, UUID_SIZE);
168 OC_LOG(level, tag, PCF("\tResource Types:"));
169 OCStringLL* strll = res->types;
172 OC_LOG_V(level, tag, "\t\t%s", strll->value);
175 OC_LOG(level, tag, PCF("\tInterfaces:"));
176 strll = res->interfaces;
179 OC_LOG_V(level, tag, "\t\t%s", strll->value);
183 OC_LOG_V(level, tag, "\tBitmap: %u", res->bitmap);
184 OC_LOG_V(level, tag, "\tSecure?: %s", res->secure ? "true" : "false");
185 OC_LOG_V(level, tag, "\tPort: %u", res->port);
186 OC_LOG(level, tag, PCF(""));
192 static inline void OCPayloadLogDevice(LogLevel level, const char* tag, OCDevicePayload* payload)
194 OC_LOG(level, tag, PCF("Payload Type: Device"));
195 OC_LOG_V(level, tag, "\tURI:%s", payload->uri);
196 OC_LOG(level, tag, PCF("\tSID:"));
197 OC_LOG_BUFFER(level, tag, payload->sid, UUID_SIZE);
198 OC_LOG_V(level, tag, "\tDevice Name:%s", payload->deviceName);
199 OC_LOG_V(level, tag, "\tSpec Version%s", payload->specVersion);
200 OC_LOG_V(level, tag, "\tData Model Version:%s", payload->dataModelVersion);
203 static inline void OCPayloadLogPlatform(LogLevel level, const char* tag, OCPlatformPayload* payload)
205 OC_LOG(level, tag, PCF("Payload Type: Platform"));
206 OC_LOG_V(level, tag, "\tURI:%s", payload->uri);
207 OC_LOG_V(level, tag, "\tPlatform ID:%s", payload->info.platformID);
208 OC_LOG_V(level, tag, "\tMfg Name:%s", payload->info.manufacturerName);
209 OC_LOG_V(level, tag, "\tMfg URL:%s", payload->info.manufacturerUrl);
210 OC_LOG_V(level, tag, "\tModel Number:%s", payload->info.modelNumber);
211 OC_LOG_V(level, tag, "\tDate of Mfg:%s", payload->info.dateOfManufacture);
212 OC_LOG_V(level, tag, "\tPlatform Version:%s", payload->info.platformVersion);
213 OC_LOG_V(level, tag, "\tOS Version:%s", payload->info.operatingSystemVersion);
214 OC_LOG_V(level, tag, "\tHardware Version:%s", payload->info.hardwareVersion);
215 OC_LOG_V(level, tag, "\tFirmware Version:%s", payload->info.firmwareVersion);
216 OC_LOG_V(level, tag, "\tSupport URL:%s", payload->info.supportUrl);
217 OC_LOG_V(level, tag, "\tSystem Time:%s", payload->info.systemTime);
220 static inline void OCPayloadLogPresence(LogLevel level, const char* tag, OCPresencePayload* payload)
222 OC_LOG(level, tag, PCF("Payload Type: Presence"));
223 OC_LOG_V(level, tag, "\tSequence Number:%u", payload->sequenceNumber);
224 OC_LOG_V(level, tag, "\tMax Age:%d", payload->maxAge);
225 OC_LOG_V(level, tag, "\tTrigger:%s", convertTriggerEnumToString(payload->trigger));
226 OC_LOG_V(level, tag, "\tResource Type:%s", payload->resourceType);
229 static inline void OCPayloadLogSecurity(LogLevel level, const char* tag,
230 OCSecurityPayload* payload)
232 OC_LOG(level, tag, PCF("Payload Type: Security"));
233 OC_LOG_V(level, tag, "\tSecurity Data: %s", payload->securityData);
236 static inline void OCPayloadLog(LogLevel level, const char* tag, OCPayload* payload)
240 OC_LOG(level, tag, PCF("NULL Payload"));
243 switch(payload->type)
245 case PAYLOAD_TYPE_REPRESENTATION:
246 OCPayloadLogRep(level, tag, (OCRepPayload*)payload);
248 case PAYLOAD_TYPE_DISCOVERY:
249 OCPayloadLogDiscovery(level, tag, (OCDiscoveryPayload*)payload);
251 case PAYLOAD_TYPE_DEVICE:
252 OCPayloadLogDevice(level, tag, (OCDevicePayload*)payload);
254 case PAYLOAD_TYPE_PLATFORM:
255 OCPayloadLogPlatform(level, tag, (OCPlatformPayload*)payload);
257 case PAYLOAD_TYPE_PRESENCE:
258 OCPayloadLogPresence(level, tag, (OCPresencePayload*)payload);
260 case PAYLOAD_TYPE_SECURITY:
261 OCPayloadLogSecurity(level, tag, (OCSecurityPayload*)payload);
264 OC_LOG_V(level, tag, "Unknown Payload Type: %d", payload->type);
269 #define OC_LOG_PAYLOAD(level, tag, payload)
272 void OCPayloadDestroy(OCPayload* payload);
274 // Representation Payload
275 OCRepPayload* OCRepPayloadCreate();
277 size_t calcDimTotal(const size_t dimensions[MAX_REP_ARRAY_DEPTH]);
279 OCRepPayload* OCRepPayloadClone(const OCRepPayload* payload);
281 void OCRepPayloadAppend(OCRepPayload* parent, OCRepPayload* child);
283 bool OCRepPayloadSetUri(OCRepPayload* payload, const char* uri);
285 bool OCRepPayloadAddResourceType(OCRepPayload* payload, const char* resourceType);
286 bool OCRepPayloadAddInterface(OCRepPayload* payload, const char* interface);
288 bool OCRepPayloadAddResourceTypeAsOwner(OCRepPayload* payload, char* resourceType);
289 bool OCRepPayloadAddInterfaceAsOwner(OCRepPayload* payload, char* interface);
291 bool OCRepPayloadIsNull(const OCRepPayload* payload, const char* name);
292 bool OCRepPayloadSetNull(OCRepPayload* payload, const char* name);
294 bool OCRepPayloadSetPropInt(OCRepPayload* payload, const char* name, int64_t value);
295 bool OCRepPayloadGetPropInt(const OCRepPayload* payload, const char* name, int64_t* value);
297 bool OCRepPayloadSetPropDouble(OCRepPayload* payload, const char* name, double value);
298 bool OCRepPayloadGetPropDouble(const OCRepPayload* payload, const char* name, double* value);
300 bool OCRepPayloadSetPropString(OCRepPayload* payload, const char* name, const char* value);
301 bool OCRepPayloadSetPropStringAsOwner(OCRepPayload* payload, const char* name, char* value);
302 bool OCRepPayloadGetPropString(const OCRepPayload* payload, const char* name, char** value);
304 bool OCRepPayloadSetPropBool(OCRepPayload* payload, const char* name, bool value);
305 bool OCRepPayloadGetPropBool(const OCRepPayload* payload, const char* name, bool* value);
307 bool OCRepPayloadSetPropObject(OCRepPayload* payload, const char* name, const OCRepPayload* value);
308 bool OCRepPayloadSetPropObjectAsOwner(OCRepPayload* payload, const char* name,
309 OCRepPayload* value);
310 bool OCRepPayloadGetPropObject(const OCRepPayload* payload, const char* name, OCRepPayload** value);
312 bool OCRepPayloadSetIntArrayAsOwner(OCRepPayload* payload, const char* name,
313 int64_t* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
314 bool OCRepPayloadSetIntArray(OCRepPayload* payload, const char* name,
315 const int64_t* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
316 bool OCRepPayloadGetIntArray(const OCRepPayload* payload, const char* name,
317 int64_t** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
319 bool OCRepPayloadSetDoubleArrayAsOwner(OCRepPayload* payload, const char* name,
320 double* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
321 bool OCRepPayloadSetDoubleArray(OCRepPayload* payload, const char* name,
322 const double* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
323 bool OCRepPayloadGetDoubleArray(const OCRepPayload* payload, const char* name,
324 double** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
326 bool OCRepPayloadSetStringArrayAsOwner(OCRepPayload* payload, const char* name,
327 char** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
328 bool OCRepPayloadSetStringArray(OCRepPayload* payload, const char* name,
329 const char** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
330 bool OCRepPayloadGetStringArray(const OCRepPayload* payload, const char* name,
331 char*** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
333 bool OCRepPayloadSetBoolArrayAsOwner(OCRepPayload* payload, const char* name,
334 bool* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
335 bool OCRepPayloadSetBoolArray(OCRepPayload* payload, const char* name,
336 const bool* array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
337 bool OCRepPayloadGetBoolArray(const OCRepPayload* payload, const char* name,
338 bool** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
340 bool OCRepPayloadSetPropObjectArrayAsOwner(OCRepPayload* payload, const char* name,
341 OCRepPayload** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
342 bool OCRepPayloadSetPropObjectArray(OCRepPayload* payload, const char* name,
343 const OCRepPayload** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
344 bool OCRepPayloadGetPropObjectArray(const OCRepPayload* payload, const char* name,
345 OCRepPayload*** array, size_t dimensions[MAX_REP_ARRAY_DEPTH]);
347 void OCRepPayloadDestroy(OCRepPayload* payload);
350 OCDiscoveryPayload* OCDiscoveryPayloadCreate();
352 OCSecurityPayload* OCSecurityPayloadCreate(const char* securityData);
353 void OCSecurityPayloadDestroy(OCSecurityPayload* payload);
355 void OCDiscoveryPayloadAddResource(OCDiscoveryPayload* payload, const OCResource* res,
357 void OCDiscoveryPayloadAddNewResource(OCDiscoveryPayload* payload, OCResourcePayload* res);
358 size_t OCDiscoveryPayloadGetResourceCount(OCDiscoveryPayload* payload);
359 OCResourcePayload* OCDiscoveryPayloadGetResource(OCDiscoveryPayload* payload, size_t index);
361 void OCDiscoveryPayloadDestroy(OCDiscoveryPayload* payload);
364 OCDevicePayload* OCDevicePayloadCreate(const char* uri, const uint8_t* sid, const char* dname,
365 const char* specVer, const char* dmVer);
366 void OCDevicePayloadDestroy(OCDevicePayload* payload);
369 OCPlatformPayload* OCPlatformPayloadCreate(const char* uri, const OCPlatformInfo* platformInfo);
370 OCPlatformPayload* OCPlatformPayloadCreateAsOwner(char* uri, OCPlatformInfo* platformInfo);
372 void OCPlatformPayloadDestroy(OCPlatformPayload* payload);
375 OCPresencePayload* OCPresencePayloadCreate(uint32_t seqNum, uint32_t maxAge,
376 OCPresenceTrigger trigger, const char* resourceType);
377 void OCPresencePayloadDestroy(OCPresencePayload* payload);