Commit 8c28a797 authored by Greg Williams's avatar Greg Williams
Browse files

Flushed out basic setup for TCP/IP socket connection creation, but need to...

Flushed out basic setup for TCP/IP socket connection creation, but need to create actual socket connection with OS.
parent 7a548e34
Loading
Loading
Loading
Loading
+26 −6
Original line number Diff line number Diff line
@@ -12,20 +12,40 @@ def report_banner(message)
  report "\n#{message}\n#{'='*message.length}\n\n"
end

def execute_command(cmd, banner=nil)
  report_banner banner unless banner.nil?
  report "Executing: #{cmd}"
  sh cmd
  report unless banner.nil?
end

HERE = File.expand_path(File.dirname(__FILE__))
PROTO_IN = File.expand_path(File.join(HERE, 'vendor', 'kinetic-protocol'))
PROTO_OUT = File.join(HERE, 'build', 'temp', 'proto')
directory PROTO_OUT

desc "Generate protocol buffers"
task :proto => [PROTO_OUT] do
  report_banner "Generating Kinetic C protocol buffers"
  cd PROTO_OUT do
    rm Dir["*.h", "*.c", "*.proto"]
    cp "#{PROTO_IN}/kinetic.proto", "."
    execute_command "protoc-c --c_out=. kinetic.proto"
    report "Generated #{Dir['*.h', '*.c'].join(', ')}\n\n"
  end
end

desc "Analyze code w/CppCheck"
task :cppcheck do
  raise "CppCheck not found!" unless `cppcheck --version` =~ /cppcheck \d+.\d+/mi
  report_banner "Analyzing code w/CppCheck"
  sh "cppcheck ./src"
  report ''
  execute_command "cppcheck ./src ./build/temp/proto", "Analyzing code w/CppCheck"
end

task :default => ['cppcheck', 'test:all', 'release']
task :default => ['proto', 'cppcheck', 'test:all', 'release']

desc "Run client test utility"
task :run do
  report_banner "Running client test utility"
  sh "./build/release/kinetic-c-client"
  execute_command "./build/release/kinetic-c-client", "Running client test utility"
end

desc "Build all and run test utility"
+24 −2
Original line number Diff line number Diff line
#include "KineticApi.h"
#include "KineticConnection.h"
#include "KineticLogger.h"
#include <stdio.h>

const KineticConnection KineticApi_Connect(void)
void KineticApi_Init(const char* log_file)
{
	return KineticConnection_Create();
    KineticLogger_Init(log_file);
}

const KineticConnection KineticApi_Connect(const char* host, int port, bool blocking)
{
    KineticConnection connection = KineticConnection_Create();

    if (!KineticConnection_Connect(&connection, host, port, blocking))
    {
        connection.Connected = false;
        connection.FileDescriptor = -1;
        char message[64];
        sprintf(message, "Failed creating connection to %s:%d", host, port);
        LOG(message);
    }
    else
    {
        connection.Connected = true;
    }

	return connection;
}

KineticProto_Status_StatusCode KineticApi_SendNoop(const KineticConnection* connection)
+2 −2
Original line number Diff line number Diff line
@@ -2,9 +2,9 @@
#define _KINETIC_API_H

#include "KineticTypes.h"
#include "KineticConnection.h"

const KineticConnection KineticApi_Connect(void);
void KineticApi_Init(const char* log_file);
const KineticConnection KineticApi_Connect(const char* host, int port, bool blocking);
KineticProto_Status_StatusCode KineticApi_SendNoop(const KineticConnection* connection);

#endif // _KINETIC_API_H
+17 −14
Original line number Diff line number Diff line
#include "KineticConnection.h"
#include "KineticNetwork.h"
#include <netinet/in.h>
#include "KineticSocket.h"
#include <string.h>

KineticConnection KineticConnection_Create(void)
{
    KineticConnection connection;
    memset(&connection, 0, sizeof(connection));
    connection.Blocking = true;
    connection.FileDescriptor = -1;
    return connection;
}

KineticProto_Status_StatusCode KineticConnection_Connect(KineticConnection* connection)
bool KineticConnection_Connect(KineticConnection* connection, const char* host, int port, bool blocking)
{
	struct ifaddrs addr = KineticNetwork_GetDestinationIP();
	connection->Connected = true;
	strcpy(connection->Name, addr.ifa_name);
	connection->Flags = addr.ifa_flags;
	memcpy(&connection->Addr, addr.ifa_addr, sizeof(struct sockaddr));
	memcpy(&connection->NetMask, addr.ifa_netmask, sizeof(struct sockaddr));
	memcpy(&connection->DestAddr, addr.ifa_dstaddr, sizeof(struct sockaddr));
	return KINETIC_PROTO_STATUS_STATUS_CODE_SUCCESS;
    connection->Connected = false;
    connection->Blocking = blocking;
    connection->Port = port;
    connection->FileDescriptor = -1;
    strcpy(connection->Host, host);

    connection->FileDescriptor = KineticSocket_Connect(connection->Host, connection->Port);
    connection->Connected = (connection->FileDescriptor >= 0);

    return connection->Connected;
}
+1 −13
Original line number Diff line number Diff line
@@ -3,19 +3,7 @@

#include "KineticTypes.h"

#define MAX_NET_NAME 128

typedef struct _KineticConnection
{
	bool Connected;
	char Name[MAX_NET_NAME];
	unsigned int Flags;
	struct sockaddr Addr;
	struct sockaddr NetMask;
	struct sockaddr DestAddr;
} KineticConnection;

KineticConnection KineticConnection_Create(void);
KineticProto_Status_StatusCode KineticConnection_Connect(KineticConnection* connection);
bool KineticConnection_Connect(KineticConnection* connection, const char* host, int port, bool blocking);

#endif // _KINETIC_CONNECTION_H
Loading