Loading Makefile +8 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ LIB_DEPS = \ $(LIB_DIR)/kinetic_logger.h \ $(LIB_DIR)/kinetic_hmac.h \ $(LIB_DIR)/kinetic_controller.h \ $(LIB_DIR)/kinetic_device_info.h \ $(LIB_DIR)/kinetic_serial_allocator.h \ $(LIB_DIR)/kinetic_connection.h \ $(LIB_DIR)/kinetic_types_internal.h \ $(PUB_INC)/kinetic_types.h \ Loading @@ -67,6 +69,8 @@ LIB_OBJS = \ $(OUT_DIR)/kinetic_logger.o \ $(OUT_DIR)/kinetic_hmac.o \ $(OUT_DIR)/kinetic_controller.o \ $(OUT_DIR)/kinetic_device_info.o \ $(OUT_DIR)/kinetic_serial_allocator.o \ $(OUT_DIR)/kinetic_connection.o \ $(OUT_DIR)/kinetic_types_internal.o \ $(OUT_DIR)/kinetic_types.o \ Loading Loading @@ -113,6 +117,10 @@ $(OUT_DIR)/kinetic_controller.o: $(LIB_DIR)/kinetic_controller.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_connection.o: $(LIB_DIR)/kinetic_connection.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_device_info.o: $(LIB_DIR)/kinetic_device_info.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_serial_allocator.o: $(LIB_DIR)/kinetic_serial_allocator.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_types_internal.o: $(LIB_DIR)/kinetic_types_internal.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_types.o: $(LIB_DIR)/kinetic_types.c $(LIB_DEPS) Loading include/kinetic_types.h +5 −3 Original line number Diff line number Diff line Loading @@ -290,17 +290,19 @@ typedef struct { ByteArray name; } KineticDeviceInfo_Device; typedef struct { KineticDeviceInfo_Utilization** utilizations; size_t totalLength; KineticDeviceInfo_Utilization* utilizations; size_t numUtilizations; KineticDeviceInfo_Temperature** temperatures; KineticDeviceInfo_Temperature* temperatures; size_t numTemperatures; KineticDeviceInfo_Capacity* capacity; KineticDeviceInfo_Configuration* configuration; KineticDeviceInfo_Statistics** statistics; KineticDeviceInfo_Statistics* statistics; size_t numStatistics; ByteArray messages; KineticDeviceInfo_Limits* limits; KineticDeviceInfo_Device* device; } KineticDeviceInfo; #define KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN (1024 * 1024 * 4) // Will get reallocated to actual/used size post-copy #endif // _KINETIC_TYPES_H src/lib/kinetic_client.c +0 −1 Original line number Diff line number Diff line Loading @@ -204,7 +204,6 @@ KineticStatus KineticClient_GetLog(KineticSessionHandle handle, { assert(handle != KINETIC_HANDLE_INVALID); assert(info != NULL); // assert(*info != NULL); KineticOperation* operation = KineticController_CreateOperation(handle); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} Loading src/lib/kinetic_device_info.c +73 −69 Original line number Diff line number Diff line Loading @@ -23,84 +23,88 @@ #include "kinetic_logger.h" #include <stdlib.h> static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog) { size_t size = 0; size_t count = getLog->n_utilizations; size += count * (sizeof(KineticDeviceInfo_Utilization*) + sizeof(KineticDeviceInfo_Utilization)); for (size_t i = 0; i < count; i++) { if (getLog->utilizations[i]->name != NULL) { size += strlen(getLog->utilizations[i]->name) + 1; } } return size; } // static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // size += getLog->n_utilizations * sizeof(KineticDeviceInfo_Utilization); // for (size_t i = 0; i < getLog->n_utilizations; i++) { // if (getLog->utilizations[i]->name != NULL) { // size += strlen(getLog->utilizations[i]->name) + 1; // } // } // return size; // } static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo(const KineticProto_Command_GetLog* getLog) { size_t size = 0; size += sizeof(KineticDeviceInfo); size += sizeof_KineticDeviceInfo_Utilizations(getLog); size += sizeof_KineticDeviceInfo_Temperatures(getLog); size += sizeof_KineticDeviceInfo_Capacity(getLog); size += sizeof_KineticDeviceInfo_Configuration(getLog); size += sizeof_KineticDeviceInfo_Statistics(getLog); size += sizeof_messages(getLog); size += sizeof_KineticDeviceInfo_Limits(getLog); size += sizeof_KineticDeviceInfo_Device(getLog); return size; } // static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } KineticDeviceInfo* KineticDeviceInfo_Create(const KineticProto_Command_GetLog* getLog) { assert(getLog != NULL); // Determine the total size to allocate for all available data size_t totalSize = sizeof_KineticDeviceInfo(getLog); KineticDeviceInfo* info = NULL; // Allocate the data KineticSerialAllocator allocator = KineticSerialAllocator_Create(totalSize); info = (KineticDeviceInfo*)allocator.buffer; KineticSerialAllocator allocator = KineticSerialAllocator_Create(KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN); // Copy data into the nested allocated structure tree KineticDeviceInfo* info = KineticSerialAllocator_AllocateChunk(&allocator, sizeof(KineticDeviceInfo)); info->numUtilizations = getLog->n_utilizations; if (info->numUtilizations > 0) { info->utilizations = KineticSerialAllocator_AllocateChunk(&allocator, info->numUtilizations * sizeof(KineticDeviceInfo_Utilization)); for (size_t i = 0; i < info->numUtilizations; i++) { // Copy name string const char* protoName = getLog->utilizations[i]->name; if (protoName != NULL) { size_t len = strlen(protoName) + 1; info->utilizations[i].name = KineticSerialAllocator_AllocateChunk(&allocator, len); memcpy(info->utilizations[i].name, protoName, len); } // Copy value if (getLog->utilizations[i]->has_value) { info->utilizations[i].value = getLog->utilizations[i]->value; } } } assert(info == KineticSerialAllocator_GetBuffer(&allocator)); info->totalLength = allocator.used; // Trim the buffer prior to returning in order to free up unused memory info->totalLength = KineticSerialAllocator_TrimBuffer(&allocator); info = KineticSerialAllocator_GetBuffer(&allocator); LOGF2("Created KineticDeviceInfo @ 0x%0llX w/ length=%zu", info, info->totalLength); return info; } src/lib/kinetic_operation.c +9 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include "kinetic_pdu.h" #include "kinetic_nbo.h" #include "kinetic_socket.h" #include "kinetic_device_info.h" #include "kinetic_allocator.h" #include "kinetic_logger.h" #include <stdlib.h> Loading Loading @@ -390,11 +391,16 @@ KineticStatus KineticOperation_GetLogCallback(KineticOperation* operation) LOGF3("GETLOG callback w/ operation (0x%0llX) on connection (0x%0llX)", operation, operation->connection); assert(operation->response != NULL); assert(operation->response->command->body->getLog != NULL); // Copy the data from the response protobuf into a new info struct // TODO: stuff!!! return KINETIC_STATUS_INVALID; if (operation->response->command->body->getLog == NULL) { return KINETIC_STATUS_OPERATION_FAILED; } else { *operation->deviceInfo = KineticDeviceInfo_Create(operation->response->command->body->getLog); return KINETIC_STATUS_SUCCESS; } } void KineticOperation_BuildGetLog(KineticOperation* const operation, Loading Loading
Makefile +8 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ LIB_DEPS = \ $(LIB_DIR)/kinetic_logger.h \ $(LIB_DIR)/kinetic_hmac.h \ $(LIB_DIR)/kinetic_controller.h \ $(LIB_DIR)/kinetic_device_info.h \ $(LIB_DIR)/kinetic_serial_allocator.h \ $(LIB_DIR)/kinetic_connection.h \ $(LIB_DIR)/kinetic_types_internal.h \ $(PUB_INC)/kinetic_types.h \ Loading @@ -67,6 +69,8 @@ LIB_OBJS = \ $(OUT_DIR)/kinetic_logger.o \ $(OUT_DIR)/kinetic_hmac.o \ $(OUT_DIR)/kinetic_controller.o \ $(OUT_DIR)/kinetic_device_info.o \ $(OUT_DIR)/kinetic_serial_allocator.o \ $(OUT_DIR)/kinetic_connection.o \ $(OUT_DIR)/kinetic_types_internal.o \ $(OUT_DIR)/kinetic_types.o \ Loading Loading @@ -113,6 +117,10 @@ $(OUT_DIR)/kinetic_controller.o: $(LIB_DIR)/kinetic_controller.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_connection.o: $(LIB_DIR)/kinetic_connection.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_device_info.o: $(LIB_DIR)/kinetic_device_info.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_serial_allocator.o: $(LIB_DIR)/kinetic_serial_allocator.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_types_internal.o: $(LIB_DIR)/kinetic_types_internal.c $(LIB_DEPS) $(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS) $(OUT_DIR)/kinetic_types.o: $(LIB_DIR)/kinetic_types.c $(LIB_DEPS) Loading
include/kinetic_types.h +5 −3 Original line number Diff line number Diff line Loading @@ -290,17 +290,19 @@ typedef struct { ByteArray name; } KineticDeviceInfo_Device; typedef struct { KineticDeviceInfo_Utilization** utilizations; size_t totalLength; KineticDeviceInfo_Utilization* utilizations; size_t numUtilizations; KineticDeviceInfo_Temperature** temperatures; KineticDeviceInfo_Temperature* temperatures; size_t numTemperatures; KineticDeviceInfo_Capacity* capacity; KineticDeviceInfo_Configuration* configuration; KineticDeviceInfo_Statistics** statistics; KineticDeviceInfo_Statistics* statistics; size_t numStatistics; ByteArray messages; KineticDeviceInfo_Limits* limits; KineticDeviceInfo_Device* device; } KineticDeviceInfo; #define KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN (1024 * 1024 * 4) // Will get reallocated to actual/used size post-copy #endif // _KINETIC_TYPES_H
src/lib/kinetic_client.c +0 −1 Original line number Diff line number Diff line Loading @@ -204,7 +204,6 @@ KineticStatus KineticClient_GetLog(KineticSessionHandle handle, { assert(handle != KINETIC_HANDLE_INVALID); assert(info != NULL); // assert(*info != NULL); KineticOperation* operation = KineticController_CreateOperation(handle); if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;} Loading
src/lib/kinetic_device_info.c +73 −69 Original line number Diff line number Diff line Loading @@ -23,84 +23,88 @@ #include "kinetic_logger.h" #include <stdlib.h> static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog) { size_t size = 0; size_t count = getLog->n_utilizations; size += count * (sizeof(KineticDeviceInfo_Utilization*) + sizeof(KineticDeviceInfo_Utilization)); for (size_t i = 0; i < count; i++) { if (getLog->utilizations[i]->name != NULL) { size += strlen(getLog->utilizations[i]->name) + 1; } } return size; } // static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // size += getLog->n_utilizations * sizeof(KineticDeviceInfo_Utilization); // for (size_t i = 0; i < getLog->n_utilizations; i++) { // if (getLog->utilizations[i]->name != NULL) { // size += strlen(getLog->utilizations[i]->name) + 1; // } // } // return size; // } static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog) { size_t size = 0; return size; } static size_t sizeof_KineticDeviceInfo(const KineticProto_Command_GetLog* getLog) { size_t size = 0; size += sizeof(KineticDeviceInfo); size += sizeof_KineticDeviceInfo_Utilizations(getLog); size += sizeof_KineticDeviceInfo_Temperatures(getLog); size += sizeof_KineticDeviceInfo_Capacity(getLog); size += sizeof_KineticDeviceInfo_Configuration(getLog); size += sizeof_KineticDeviceInfo_Statistics(getLog); size += sizeof_messages(getLog); size += sizeof_KineticDeviceInfo_Limits(getLog); size += sizeof_KineticDeviceInfo_Device(getLog); return size; } // static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } // static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog) // { // size_t size = 0; // return size; // } KineticDeviceInfo* KineticDeviceInfo_Create(const KineticProto_Command_GetLog* getLog) { assert(getLog != NULL); // Determine the total size to allocate for all available data size_t totalSize = sizeof_KineticDeviceInfo(getLog); KineticDeviceInfo* info = NULL; // Allocate the data KineticSerialAllocator allocator = KineticSerialAllocator_Create(totalSize); info = (KineticDeviceInfo*)allocator.buffer; KineticSerialAllocator allocator = KineticSerialAllocator_Create(KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN); // Copy data into the nested allocated structure tree KineticDeviceInfo* info = KineticSerialAllocator_AllocateChunk(&allocator, sizeof(KineticDeviceInfo)); info->numUtilizations = getLog->n_utilizations; if (info->numUtilizations > 0) { info->utilizations = KineticSerialAllocator_AllocateChunk(&allocator, info->numUtilizations * sizeof(KineticDeviceInfo_Utilization)); for (size_t i = 0; i < info->numUtilizations; i++) { // Copy name string const char* protoName = getLog->utilizations[i]->name; if (protoName != NULL) { size_t len = strlen(protoName) + 1; info->utilizations[i].name = KineticSerialAllocator_AllocateChunk(&allocator, len); memcpy(info->utilizations[i].name, protoName, len); } // Copy value if (getLog->utilizations[i]->has_value) { info->utilizations[i].value = getLog->utilizations[i]->value; } } } assert(info == KineticSerialAllocator_GetBuffer(&allocator)); info->totalLength = allocator.used; // Trim the buffer prior to returning in order to free up unused memory info->totalLength = KineticSerialAllocator_TrimBuffer(&allocator); info = KineticSerialAllocator_GetBuffer(&allocator); LOGF2("Created KineticDeviceInfo @ 0x%0llX w/ length=%zu", info, info->totalLength); return info; }
src/lib/kinetic_operation.c +9 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include "kinetic_pdu.h" #include "kinetic_nbo.h" #include "kinetic_socket.h" #include "kinetic_device_info.h" #include "kinetic_allocator.h" #include "kinetic_logger.h" #include <stdlib.h> Loading Loading @@ -390,11 +391,16 @@ KineticStatus KineticOperation_GetLogCallback(KineticOperation* operation) LOGF3("GETLOG callback w/ operation (0x%0llX) on connection (0x%0llX)", operation, operation->connection); assert(operation->response != NULL); assert(operation->response->command->body->getLog != NULL); // Copy the data from the response protobuf into a new info struct // TODO: stuff!!! return KINETIC_STATUS_INVALID; if (operation->response->command->body->getLog == NULL) { return KINETIC_STATUS_OPERATION_FAILED; } else { *operation->deviceInfo = KineticDeviceInfo_Create(operation->response->command->body->getLog); return KINETIC_STATUS_SUCCESS; } } void KineticOperation_BuildGetLog(KineticOperation* const operation, Loading