Commit 281466e4 authored by Greg Williams's avatar Greg Williams
Browse files

Broke out operation build methods to kinetic_builder.

Broke out operation callbacks to kinetic_callbacks.
Renamed acl to kinetic_acl for consistency.
parent 71656442
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ LIB_OBJS = \
	$(OUT_DIR)/kinetic_allocator.o \
	$(OUT_DIR)/kinetic_nbo.o \
	$(OUT_DIR)/kinetic_operation.o \
	$(OUT_DIR)/kinetic_callbacks.o \
	$(OUT_DIR)/kinetic_builder.o \
	$(OUT_DIR)/kinetic_request.o \
	$(OUT_DIR)/kinetic_response.o \
	$(OUT_DIR)/kinetic_bus.o \
+1 −1
Original line number Diff line number Diff line
@@ -35,6 +35,6 @@ typedef enum {
    ACL_ERROR_BAD_JSON = -4,
    ACL_ERROR_MISSING_FIELD = -5,
    ACL_ERROR_INVALID_FIELD = -6,
} acl_of_file_res;
} KineticACLLoadResult;

#endif
+14 −14
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
#include <errno.h>

#include "kinetic_logger.h"
#include "acl.h"
#include "kinetic_acl.h"
#include "json.h"

typedef struct {
@@ -45,10 +45,10 @@ static permission_pair permission_table[] = {

#define PERM_TABLE_ROWS sizeof(permission_table)/sizeof(permission_table)[0]

static acl_of_file_res read_next_ACL(const char *buf, size_t buf_size,
static KineticACLLoadResult read_next_ACL(const char *buf, size_t buf_size,
    size_t offset, size_t *new_offset, struct json_tokener *tokener,
    KineticProto_Command_Security_ACL **instance);
static acl_of_file_res unpack_scopes(KineticProto_Command_Security_ACL *acl,
static KineticACLLoadResult unpack_scopes(KineticProto_Command_Security_ACL *acl,
    int scope_count, json_object *scopes);

static const char *str_of_permission(KineticProto_Command_Security_ACL_Permission perm) {
@@ -67,8 +67,8 @@ static KineticProto_Command_Security_ACL_Permission permission_of_str(const char
    return KINETIC_PROTO_COMMAND_SECURITY_ACL_PERMISSION_INVALID_PERMISSION;
}

acl_of_file_res
acl_of_file(const char *path, struct ACL **instance) {
KineticACLLoadResult
KineticACL_LoadFromFile(const char *path, struct ACL **instance) {
    if (path == NULL || instance == NULL) {
        return ACL_ERROR_NULL;
    }
@@ -81,7 +81,7 @@ acl_of_file(const char *path, struct ACL **instance) {
        errno = 0;
        return ACL_ERROR_BAD_JSON;
    }
    acl_of_file_res res = ACL_ERROR_NULL;
    KineticACLLoadResult res = ACL_ERROR_NULL;

    const int BUF_START_SIZE = 256;
    char *buf = calloc(1, BUF_START_SIZE);
@@ -123,9 +123,9 @@ cleanup:
    return res;
}

acl_of_file_res
KineticACLLoadResult
acl_of_string(const char *buf, size_t buf_size, struct ACL **instance) {
    acl_of_file_res res = ACL_ERROR_MEMORY;
    KineticACLLoadResult res = ACL_ERROR_MEMORY;
    struct ACL *acl_group = NULL;
    KineticProto_Command_Security_ACL **acl_array = NULL;
    struct json_tokener* tokener = NULL;
@@ -191,7 +191,7 @@ cleanup:
    }
}

static acl_of_file_res read_next_ACL(const char *buf, size_t buf_size,
static KineticACLLoadResult read_next_ACL(const char *buf, size_t buf_size,
        size_t offset, size_t *new_offset,
        struct json_tokener *tokener, KineticProto_Command_Security_ACL **instance) {
    struct json_object *obj = json_tokener_parse_ex(tokener,
@@ -207,7 +207,7 @@ static acl_of_file_res read_next_ACL(const char *buf, size_t buf_size,
    
    *new_offset = tokener->char_offset;
    
    acl_of_file_res res = ACL_ERROR_MEMORY;
    KineticACLLoadResult res = ACL_ERROR_MEMORY;
    KineticProto_Command_Security_ACL *acl = NULL;
    uint8_t *data = NULL;

@@ -278,9 +278,9 @@ cleanup:
    return res;
}

static acl_of_file_res unpack_scopes(KineticProto_Command_Security_ACL *acl,
static KineticACLLoadResult unpack_scopes(KineticProto_Command_Security_ACL *acl,
        int scope_count, json_object *scopes) {
    acl_of_file_res res = ACL_ERROR_MEMORY;
    KineticACLLoadResult res = ACL_ERROR_MEMORY;
    KineticProto_Command_Security_ACL_Scope **scope_array = NULL;
    KineticProto_Command_Security_ACL_Permission *perm_array = NULL;
    KineticProto_Command_Security_ACL_Scope *scope = NULL;
@@ -379,7 +379,7 @@ cleanup:
    return res;
}

void acl_fprintf(FILE *f, struct ACL *ACLs) {
void KineticACL_Print(FILE *f, struct ACL *ACLs) {
    if (ACLs == NULL) {
        fprintf(f, "NULL\n");
        return;
@@ -426,7 +426,7 @@ void acl_fprintf(FILE *f, struct ACL *ACLs) {
    }
}

void acl_free(struct ACL *ACLs) {
void KineticACL_Free(struct ACL *ACLs) {
    if (ACLs) {
        for (size_t ai = 0; ai < ACLs->ACL_count; ai++) {
            KineticProto_Command_Security_ACL *acl = ACLs->ACLs[ai];
+9 −9
Original line number Diff line number Diff line
@@ -17,24 +17,24 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef ACL_H
#define ACL_H
#ifndef KINETIC_ACL_H
#define KINETIC_ACL_H

#include "acl_types.h"
#include "kinetic_proto.h"

/* Attempt to instantiate an ACL structure based on the JSON data
 * contained in PATH. */
acl_of_file_res
acl_of_file(const char *path, struct ACL **instance);
KineticACLLoadResult
KineticACL_LoadFromFile(const char *path, struct ACL **instance);

acl_of_file_res
KineticACLLoadResult
acl_of_string(const char *buf, size_t buf_size, struct ACL **instance);

/* fprintf an ACL struct. */
void acl_fprintf(FILE *f, struct ACL *acl);
/* Print an ACL struct to the specified file. */
void KineticACL_Print(FILE *f, struct ACL *acl);

/* Free an ACL struct */
void acl_free(struct ACL *acl);
void KineticACL_Free(struct ACL *acl);

#endif
#endif // KINETIC_ACL_H
+13 −12
Original line number Diff line number Diff line
@@ -22,10 +22,11 @@
#include "kinetic_types_internal.h"
#include "kinetic_controller.h"
#include "kinetic_operation.h"
#include "kinetic_builder.h"
#include "kinetic_allocator.h"
#include "kinetic_auth.h"
#include "kinetic_device_info.h"
#include "acl.h"
#include "kinetic_acl.h"

#ifdef TEST
struct ACL *ACLs = NULL;
@@ -69,7 +70,7 @@ KineticStatus KineticAdminClient_SetErasePin(KineticSession const * const sessio
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildSetPin(operation, old_pin, new_pin, false);
    KineticBuilder_BuildSetPin(operation, old_pin, new_pin, false);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -91,7 +92,7 @@ KineticStatus KineticAdminClient_SecureErase(KineticSession const * const sessio
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildErase(operation, true, &pin);
    KineticBuilder_BuildErase(operation, true, &pin);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -113,7 +114,7 @@ KineticStatus KineticAdminClient_InstantErase(KineticSession const * const sessi
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildErase(operation, false, &pin);
    KineticBuilder_BuildErase(operation, false, &pin);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -134,7 +135,7 @@ KineticStatus KineticAdminClient_SetLockPin(KineticSession const * const session
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildSetPin(operation, old_pin, new_pin, true);
    KineticBuilder_BuildSetPin(operation, old_pin, new_pin, true);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -156,7 +157,7 @@ KineticStatus KineticAdminClient_LockDevice(KineticSession const * const session
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildLockUnlock(operation, true, &pin);
    KineticBuilder_BuildLockUnlock(operation, true, &pin);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -178,7 +179,7 @@ KineticStatus KineticAdminClient_UnlockDevice(KineticSession const * const sessi
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildLockUnlock(operation, false, &pin);
    KineticBuilder_BuildLockUnlock(operation, false, &pin);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -195,7 +196,7 @@ KineticStatus KineticAdminClient_GetLog(KineticSession const * const session,
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    // Initialize request
    KineticOperation_BuildGetLog(operation, type, info);
    KineticBuilder_BuildGetLog(operation, type, info);

    // Execute the operation
    return KineticController_ExecuteOperation(operation, closure);
@@ -221,7 +222,7 @@ KineticStatus KineticAdminClient_SetClusterVersion(KineticSession const * const
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}

    KineticOperation_BuildSetClusterVersion(operation, version);
    KineticBuilder_BuildSetClusterVersion(operation, version);
    return KineticController_ExecuteOperation(operation, NULL);
}

@@ -236,7 +237,7 @@ KineticStatus KineticAdminClient_SetACL(KineticSession const * const session,
    #ifndef TEST
    struct ACL *ACLs = NULL;
    #endif
    acl_of_file_res acl_res = acl_of_file(ACLPath, &ACLs);
    KineticACLLoadResult acl_res = KineticACL_LoadFromFile(ACLPath, &ACLs);
    if (acl_res != ACL_OK) {
        return KINETIC_STATUS_ACL_ERROR;
    }
@@ -248,7 +249,7 @@ KineticStatus KineticAdminClient_SetACL(KineticSession const * const session,
    }

    // Initialize request
    KineticOperation_BuildSetACL(operation, ACLs);
    KineticBuilder_BuildSetACL(operation, ACLs);
    KineticStatus status = KineticController_ExecuteOperation(operation, NULL);

    // FIXME: confirm ACLs are freed
@@ -265,7 +266,7 @@ KineticStatus KineticAdminClient_UpdateFirmware(KineticSession const * const ses
    KineticOperation* operation = KineticAllocator_NewOperation(session->connection);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}
    
    KineticStatus status = KineticOperation_BuildUpdateFirmware(operation, fw_path);
    KineticStatus status = KineticBuilder_BuildUpdateFirmware(operation, fw_path);
    if (status != KINETIC_STATUS_SUCCESS) {
        return status;
    }
Loading