Commit 44323fdc authored by Greg Williams's avatar Greg Williams
Browse files

Refactored initial connection status to be consumed in KineticConnection module for encapsulation

parent 261e685b
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -176,10 +176,9 @@ void KineticAllocator_FreeList(KineticList* const list)

}



KineticPDU* KineticAllocator_NewPDU(KineticList* const list)
KineticPDU* KineticAllocator_NewPDU(KineticList* const list, KineticConnection* connection)
{
    assert(connection != NULL);
    KineticPDU* newPDU = (KineticPDU*)KineticAllocator_NewItem(
                             list, sizeof(KineticPDU));
    if (newPDU == NULL) {
@@ -187,6 +186,7 @@ KineticPDU* KineticAllocator_NewPDU(KineticList* const list)
        return NULL;
    }
    assert(newPDU->proto == NULL);
    KINETIC_PDU_INIT(newPDU, connection);
    // LOGF("Allocated new PDU @ 0x%0llX", (long long)newPDU);
    return newPDU;
}
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@

#include "kinetic_types_internal.h"

KineticPDU* KineticAllocator_NewPDU(KineticList* const list);
KineticPDU* KineticAllocator_NewPDU(KineticList* const list, KineticConnection* connection);
void KineticAllocator_FreePDU(KineticList* const list, KineticPDU* pdu);
void KineticAllocator_FreeAllPDUs(KineticList* const list);
bool KineticAllocator_ValidateAllMemoryFreed(KineticList* const list);
+4 −11
Original line number Diff line number Diff line
@@ -111,18 +111,19 @@ KineticStatus KineticClient_Connect(const KineticSession* config,
        return KINETIC_STATUS_HMAC_EMPTY;
    }

    // Obtain a new connection/handle
    *handle = KineticConnection_NewConnection(config);
    if (handle == KINETIC_HANDLE_INVALID) {
        LOG("Failed connecting to device!");
        return KINETIC_STATUS_SESSION_INVALID;
    }

    KineticConnection* connection = KineticConnection_FromHandle(*handle);
    if (connection == NULL) {
        LOG("Failed getting valid connection from handle!");
        return KINETIC_STATUS_CONNECTION_ERROR;
    }

    // Create the connection
    KineticStatus status = KineticConnection_Connect(connection);
    if (status != KINETIC_STATUS_SUCCESS) {
        LOGF("Failed creating connection to %s:%d", config->host, config->port);
@@ -131,16 +132,8 @@ KineticStatus KineticClient_Connect(const KineticSession* config,
        return status;
    }

    // Retrieve initial connection status message
    KineticPDU* statusPDU = KineticAllocator_NewPDU(&connection->pdus);
    if (statusPDU == NULL) {
        LOG("Failed allocating connection status PDU after establishing a session!");
        KineticClient_Disconnect(handle);
        return KINETIC_STATUS_MEMORY_ERROR;
    }
    KINETIC_PDU_INIT(statusPDU, connection);
    status = KineticPDU_Receive(statusPDU);
    KineticAllocator_FreePDU(&connection->pdus, statusPDU);
    // Retrieve initial connection status info
    status = KineticConnection_ReceiveDeviceStatusMessage(connection);

    return status;
}
+24 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#include "kinetic_connection.h"
#include "kinetic_types_internal.h"
#include "kinetic_socket.h"
#include "kinetic_pdu.h"
#include "kinetic_allocator.h"
#include "kinetic_logger.h"
#include <string.h>
#include <stdlib.h>
@@ -100,6 +102,28 @@ KineticStatus KineticConnection_Disconnect(KineticConnection* const connection)
    return KINETIC_STATUS_SUCCESS;
}

KineticStatus KineticConnection_ReceiveDeviceStatusMessage(
    KineticConnection* const connection)
{
    if (connection == NULL || connection->socket < 0) {
        return KINETIC_STATUS_SESSION_INVALID;
    }

    KineticPDU* statusPDU = KineticAllocator_NewPDU(&connection->pdus, connection);
    if (statusPDU == NULL) {
        LOG("Failed allocating connection status PDU to receive session info!");
        return KINETIC_STATUS_MEMORY_ERROR;
    }
    KineticStatus status = KineticPDU_Receive(statusPDU);
    if (status == KINETIC_STATUS_SUCCESS) {
        if (statusPDU->command != NULL && statusPDU->command->header != NULL) {
            connection->connectionID = statusPDU->command->header->connectionID;  
        }
    }
    KineticAllocator_FreePDU(&connection->pdus, statusPDU);
    return status;
}

void KineticConnection_IncrementSequence(KineticConnection* const connection)
{
    assert(connection != NULL);
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ void KineticConnection_FreeConnection(KineticSessionHandle* const handle);
KineticConnection* KineticConnection_FromHandle(KineticSessionHandle handle);
KineticStatus KineticConnection_Connect(KineticConnection* const connection);
KineticStatus KineticConnection_Disconnect(KineticConnection* const connection);
KineticStatus KineticConnection_ReceiveDeviceStatusMessage(KineticConnection* const connection);
void KineticConnection_IncrementSequence(KineticConnection* const connection);

#endif // _KINETIC_CONNECTION_H
Loading