@@ -209,17 +209,19 @@ void convertDeviceEventToCommon(EventInfo* eventInfo, uint8_t site, DeviceEvent*
209209 eventInfo -> eventType = ENUM_EVENT_TYPE_COMMONEVENT ;
210210
211211 const char * template = "{\"site\":%d,\"typeId\":%d,\"timestamp\":\"%s\",\"data\":\"" ;
212- char * timestamp = malloc ( sizeof ( char ) * 25 ) ;
212+ char * timestamp = "" ;
213213 char * res = malloc (sizeof (char ) * 1024 );
214214 unsigned short int index ;
215215 char * temp = malloc (sizeof (char ) * 3 );
216216
217217 uint8_t * ptr = (uint8_t * ) deviceEvent -> data ;
218218
219219 char * parsedEvent ;
220+ char * parsedSubEvent ;
220221
221- memcpy (timestamp , getDateTime (deviceEvent -> time ), sizeof (char ) * 25 );
222- timestamp [24 ] = 0x0 ;
222+ if (deviceEvent -> time != 0x00000000 ) {
223+ timestamp = getDateTime (deviceEvent -> time );
224+ }
223225
224226 sprintf (res , template , site , deviceEvent -> type , timestamp );
225227
@@ -241,12 +243,14 @@ void convertDeviceEventToCommon(EventInfo* eventInfo, uint8_t site, DeviceEvent*
241243 case 0xd :
242244 case 0xf :
243245 logger (LOG_LEVEL_DEBUG , "event.c" , "handle zone event" );
244- parsedEvent = getZoneEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
245-
246- strcat (res , parsedEvent );
247- sprintf (eventInfo -> sourceId , "%s" , getData (deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength ));
246+ parsedSubEvent = getZoneEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
247+ parsedEvent = getData (deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength );
248+
249+ strcat (res , parsedSubEvent );
250+ sprintf (eventInfo -> sourceId , "%s" , parsedEvent );
248251 eventInfo -> eventType = ENUM_EVENT_TYPE_ZONEINFO ;
249252
253+ free (parsedSubEvent );
250254 free (parsedEvent );
251255
252256 break ;
@@ -259,23 +263,28 @@ void convertDeviceEventToCommon(EventInfo* eventInfo, uint8_t site, DeviceEvent*
259263 case 0x35 :
260264 case 0x37 :
261265 logger (LOG_LEVEL_DEBUG , "event.c" , "handling section event\n" );
262- parsedEvent = getSectionEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
266+ parsedSubEvent = getSectionEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
267+ parsedEvent = getData (deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength );
263268
264- strcat (res , parsedEvent );
265- sprintf (eventInfo -> sourceId , "%s" , getData ( deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength ) );
269+ strcat (res , parsedSubEvent );
270+ sprintf (eventInfo -> sourceId , "%s" , parsedEvent );
266271 eventInfo -> eventType = ENUM_EVENT_TYPE_SECTIONINFO ;
267272
273+ free (parsedSubEvent );
268274 free (parsedEvent );
269275
270276 break ;
271277
272278 // AuthenticationEvent
273279 case 0x1b :
274280 logger (LOG_LEVEL_DEBUG , "event.c" , "handling authentication event" );
275- parsedEvent = getAuthEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
276- strcat (res , parsedEvent );
277- sprintf (eventInfo -> sourceId , "%s" , getData (deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength ));
281+ parsedSubEvent = getAuthEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
282+ parsedEvent = getData (deviceEvent -> data , DEFAULT_DATA_POSITION , deviceEvent -> dataLength );
283+
284+ strcat (res , parsedSubEvent );
285+ sprintf (eventInfo -> sourceId , "%s" , parsedEvent );
278286
287+ free (parsedSubEvent );
279288 free (parsedEvent );
280289
281290 break ;
@@ -284,13 +293,16 @@ void convertDeviceEventToCommon(EventInfo* eventInfo, uint8_t site, DeviceEvent*
284293 case 0x39 :
285294 case 0x3a :
286295 logger (LOG_LEVEL_DEBUG , "event.c" , "handling arm/disarm event" );
287- parsedEvent = getSecurityEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
288- strcat (res , parsedEvent );
289- sprintf (eventInfo -> sourceId , "%s" , getData (deviceEvent -> data , USER_DATA_POSITION , deviceEvent -> dataLength ));
296+ parsedSubEvent = getSecurityEventData (deviceEvent -> type , deviceEvent -> data , deviceEvent -> dataLength );
297+ parsedEvent = getData (deviceEvent -> data , USER_DATA_POSITION , deviceEvent -> dataLength );
298+
299+ strcat (res , parsedSubEvent );
300+ sprintf (eventInfo -> sourceId , "%s" , parsedEvent );
290301 eventInfo -> eventType = ENUM_EVENT_TYPE_ARM_DISARM ;
291302
303+ free (parsedSubEvent );
292304 free (parsedEvent );
293-
305+
294306 break ;
295307
296308 // SecurityEvent
@@ -363,11 +375,15 @@ static char * getFirmwareVersionEventData(uint8_t type, uint8_t * data, uint8_t
363375 char * template = ",\"event\":\"%s\",\"scope\":\"Common\",\"version\":\"%ld.%s\"" ;
364376 char * res ;
365377 char * subVersion = getData (data , DEFAULT_DATA_POSITION , len );
366- long int version = strtol (getData (data , VERSION_DATA_POSITION , len ), 0 , 10 ) & VERSION_MASK ;
378+ char * subVersionData = getData (data , VERSION_DATA_POSITION , len );
379+ long int version = strtol (subVersionData , 0 , 10 ) & VERSION_MASK ;
367380
368381 res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 4 ));
369382 sprintf (res , template , getEventNameByType (type ), version , subVersion );
370383
384+ free (subVersion );
385+ free (subVersionData );
386+
371387 return res ;
372388}
373389
@@ -387,25 +403,34 @@ static char * getCommandEventData(uint8_t type, uint8_t * data, uint8_t len)
387403 res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + MAX_COMMAND_RESULT_NAME_LENGTH + 4 ));
388404 sprintf (res , template , getEventNameByType (type ), cmdId , cmdResult , cmdResultName );
389405
406+ free (cmdResult );
407+ free (cmdId );
408+
390409 return res ;
391410}
392411
393412static char * getReportEventData (uint8_t type , uint8_t * data , uint8_t len )
394413{
395414 char * template = ",\"temp\":%s,\"event\":\"%s\",\"scope\":\"Common\"" ;
396415 char * res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 2 ));
416+ char * extractedData = getData (data , REPORT_TEMP_DATA_POSITION , len );
397417
398- sprintf (res , template , getData ( data , REPORT_TEMP_DATA_POSITION , len ) , getEventNameByType (type ));
418+ sprintf (res , template , extractedData , getEventNameByType (type ));
399419
420+ free (extractedData );
421+
400422 return res ;
401423}
402424
403425static char * getAuthEventData (uint8_t type , uint8_t * data , uint8_t len )
404426{
405427 char * template = ",\"user\":%s,\"event\":\"%s\",\"scope\":\"Auth\"" ;
406428 char * res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 2 ));
429+ char * extractedData = getData (data , DEFAULT_DATA_POSITION , len );
430+
431+ sprintf (res , template , extractedData , getEventNameByType (type ));
407432
408- sprintf ( res , template , getData ( data , DEFAULT_DATA_POSITION , len ), getEventNameByType ( type ) );
433+ free ( extractedData );
409434
410435 return res ;
411436}
@@ -414,28 +439,34 @@ static char * getSecurityEventData(uint8_t type, uint8_t * data, uint8_t len)
414439{
415440 char * template = ",\"user\":%s,\"event\":\"%s\",\"scope\":\"Security\"" ;
416441 char * res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 2 ));
417-
418- sprintf (res , template , getData (data , USER_DATA_POSITION , len ), getEventNameByType (type ));
442+ char * extractedData = getData (data , USER_DATA_POSITION , len );
443+
444+ sprintf (res , template , extractedData , getEventNameByType (type ));
419445
446+ free (extractedData );
420447 return res ;
421448}
422449
423450static char * getZoneEventData (uint8_t type , uint8_t * data , uint8_t len )
424451{
425452 char * template = ",\"zone\":%s,\"event\":\"%s\",\"scope\":\"Zone\"" ;
426453 char * res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 2 ));
427-
428- sprintf (res , template , getData ( data , DEFAULT_DATA_POSITION , len ) , getEventNameByType (type ));
454+ char * extractedData = getData ( data , DEFAULT_DATA_POSITION , len );
455+ sprintf (res , template , extractedData , getEventNameByType (type ));
429456
457+ free (extractedData );
430458 return res ;
431459}
432460
433461static char * getSectionEventData (uint8_t type , uint8_t * data , uint8_t len )
434462{
435463 char * template = ",\"section\":%s,\"event\":\"%s\",\"scope\":\"Section\"" ;
436464 char * res = malloc (sizeof (char ) * (strlen (template ) + MAX_EVENT_NAME_LENGTH + 2 ));
465+ char * extractedData = getData (data , DEFAULT_DATA_POSITION , len );
466+
467+ sprintf (res , template , extractedData , getEventNameByType (type ));
437468
438- sprintf ( res , template , getData ( data , DEFAULT_DATA_POSITION , len ), getEventNameByType ( type ) );
469+ free ( extractedData );
439470
440471 return res ;
441472}
0 commit comments