working commit

This commit is contained in:
2026-04-23 17:53:50 +02:00
parent cf45872d91
commit 37d9ee63cc
18 changed files with 1476 additions and 1170 deletions
+26 -9
View File
@@ -89,8 +89,9 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
sbin_PROGRAMS = helmetd$(EXEEXT)
noinst_PROGRAMS = udpclient_test$(EXEEXT) service_test$(EXEEXT) \
tunclient_test$(EXEEXT) message_test$(EXEEXT)
noinst_PROGRAMS = tcpclient_test$(EXEEXT) udpclient_test$(EXEEXT) \
service_test$(EXEEXT) tunclient_test$(EXEEXT) \
message_test$(EXEEXT)
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -108,7 +109,8 @@ am__installdirs = "$(DESTDIR)$(sbindir)"
PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) hello.pb.$(OBJEXT) \
udpclient.$(OBJEXT) resolver.$(OBJEXT) iprouter.$(OBJEXT)
udpclient.$(OBJEXT) resolver.$(OBJEXT) iprouter.$(OBJEXT) \
tcpclient.$(OBJEXT) rpcclient.$(OBJEXT)
helmetd_OBJECTS = $(am_helmetd_OBJECTS)
helmetd_LDADD = $(LDADD)
am_message_test_OBJECTS = message_test.$(OBJEXT) hello.pb.$(OBJEXT)
@@ -118,6 +120,10 @@ am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD)
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) tcpclient.$(OBJEXT) \
tcpclient_test.$(OBJEXT)
tcpclient_test_OBJECTS = $(am_tcpclient_test_OBJECTS)
tcpclient_test_LDADD = $(LDADD)
am_tunclient_test_OBJECTS = tunclient_test.$(OBJEXT) \
tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT)
tunclient_test_OBJECTS = $(am_tunclient_test_OBJECTS)
@@ -167,11 +173,11 @@ am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \
$(udpclient_test_SOURCES)
$(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \
$(udpclient_test_SOURCES)
$(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -251,7 +257,7 @@ INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LDFLAGS = -pthread
LIBOBJS =
LIBS = -Wl,--as-need -lprotobuf-lite
LIBS = -Wl,--as-need -lprotobuf
LTLIBOBJS =
MAKEINFO = ${SHELL} '/home/ziggi/Projects/tcpserv09/missing' makeinfo
MKDIR_P = /bin/mkdir -p
@@ -324,7 +330,9 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \
resolver.cpp resolver.hpp \
iprouter.cpp iprouter.hpp
iprouter.cpp iprouter.hpp \
tcpclient.cpp tcpclient.hpp \
rpcclient.cpp rpcclient.hpp
tunclient_test_SOURCES = tunclient_test.cpp \
tunclient.cpp tunclient.hpp \
@@ -341,6 +349,11 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \
udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h
@@ -456,6 +469,10 @@ service_test$(EXEEXT): $(service_test_OBJECTS) $(service_test_DEPENDENCIES) $(EX
@rm -f service_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(service_test_OBJECTS) $(service_test_LDADD) $(LIBS)
tcpclient_test$(EXEEXT): $(tcpclient_test_OBJECTS) $(tcpclient_test_DEPENDENCIES) $(EXTRA_tcpclient_test_DEPENDENCIES)
@rm -f tcpclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tcpclient_test_OBJECTS) $(tcpclient_test_LDADD) $(LIBS)
tunclient_test$(EXEEXT): $(tunclient_test_OBJECTS) $(tunclient_test_DEPENDENCIES) $(EXTRA_tunclient_test_DEPENDENCIES)
@rm -f tunclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tunclient_test_OBJECTS) $(tunclient_test_LDADD) $(LIBS)
+12 -2
View File
@@ -3,7 +3,7 @@ AUTOMAKE_OPTIONS = foreign no-dependencies no-installinfo subdir-objects
CXXFLAGS = -std=c++23 -Wall -I. -pthread -D_GNU_SOURCE=1
LDFLAGS = -pthread
LIBS = -Wl,--as-need -lprotobuf-lite
LIBS = -Wl,--as-need -lprotobuf
sbin_PROGRAMS = helmetd
@@ -14,9 +14,13 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \
resolver.cpp resolver.hpp \
iprouter.cpp iprouter.hpp
iprouter.cpp iprouter.hpp \
tcpclient.cpp tcpclient.hpp \
rpcclient.cpp rpcclient.hpp
noinst_PROGRAMS = \
tcpclient_test \
udpclient_test \
service_test \
tunclient_test \
@@ -38,6 +42,12 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \
udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h
+26 -9
View File
@@ -89,8 +89,9 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
sbin_PROGRAMS = helmetd$(EXEEXT)
noinst_PROGRAMS = udpclient_test$(EXEEXT) service_test$(EXEEXT) \
tunclient_test$(EXEEXT) message_test$(EXEEXT)
noinst_PROGRAMS = tcpclient_test$(EXEEXT) udpclient_test$(EXEEXT) \
service_test$(EXEEXT) tunclient_test$(EXEEXT) \
message_test$(EXEEXT)
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -108,7 +109,8 @@ am__installdirs = "$(DESTDIR)$(sbindir)"
PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) hello.pb.$(OBJEXT) \
udpclient.$(OBJEXT) resolver.$(OBJEXT) iprouter.$(OBJEXT)
udpclient.$(OBJEXT) resolver.$(OBJEXT) iprouter.$(OBJEXT) \
tcpclient.$(OBJEXT) rpcclient.$(OBJEXT)
helmetd_OBJECTS = $(am_helmetd_OBJECTS)
helmetd_LDADD = $(LDADD)
am_message_test_OBJECTS = message_test.$(OBJEXT) hello.pb.$(OBJEXT)
@@ -118,6 +120,10 @@ am_service_test_OBJECTS = service_test.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD)
am_tcpclient_test_OBJECTS = resolver.$(OBJEXT) tcpclient.$(OBJEXT) \
tcpclient_test.$(OBJEXT)
tcpclient_test_OBJECTS = $(am_tcpclient_test_OBJECTS)
tcpclient_test_LDADD = $(LDADD)
am_tunclient_test_OBJECTS = tunclient_test.$(OBJEXT) \
tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT)
tunclient_test_OBJECTS = $(am_tunclient_test_OBJECTS)
@@ -167,11 +173,11 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \
$(udpclient_test_SOURCES)
$(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \
$(udpclient_test_SOURCES)
$(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -251,7 +257,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = -pthread
LIBOBJS = @LIBOBJS@
LIBS = -Wl,--as-need -lprotobuf-lite
LIBS = -Wl,--as-need -lprotobuf
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
@@ -324,7 +330,9 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \
resolver.cpp resolver.hpp \
iprouter.cpp iprouter.hpp
iprouter.cpp iprouter.hpp \
tcpclient.cpp tcpclient.hpp \
rpcclient.cpp rpcclient.hpp
tunclient_test_SOURCES = tunclient_test.cpp \
tunclient.cpp tunclient.hpp \
@@ -341,6 +349,11 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \
udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h
@@ -456,6 +469,10 @@ service_test$(EXEEXT): $(service_test_OBJECTS) $(service_test_DEPENDENCIES) $(EX
@rm -f service_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(service_test_OBJECTS) $(service_test_LDADD) $(LIBS)
tcpclient_test$(EXEEXT): $(tcpclient_test_OBJECTS) $(tcpclient_test_DEPENDENCIES) $(EXTRA_tcpclient_test_DEPENDENCIES)
@rm -f tcpclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tcpclient_test_OBJECTS) $(tcpclient_test_LDADD) $(LIBS)
tunclient_test$(EXEEXT): $(tunclient_test_OBJECTS) $(tunclient_test_DEPENDENCIES) $(EXTRA_tunclient_test_DEPENDENCIES)
@rm -f tunclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tunclient_test_OBJECTS) $(tunclient_test_LDADD) $(LIBS)
+49
View File
@@ -0,0 +1,49 @@
extern "C" {
#include <arpa/inet.h>
}
#include <expected>
#include <string>
#include <cstring>
#include <iostream>
#include <format>
#include <cstdint>
#include <header.hpp>
Header::Header(const uint32_t ipSize) {
pSize = ipSize;
}
Header::Header(void) {
pSize = 0;
}
std::string Header::Encode() {
std::string buffer, tmp;
auto magic = htonl(MAGIC);
tmp = std::string(reinterpret_cast<const char*>(&magic), sizeof(magic));
buffer.append(tmp);
auto size = htonl(pSize);
tmp = std::string(reinterpret_cast<const char*>(&size), sizeof(size));
buffer.append(tmp);
return buffer;
}
std::expected<void, std::string> Header::Decode(const std::string rawHeader) {
uint32_t tmp;
std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t));
auto magic = ntohl(tmp);
if (magic != MAGIC) {
return std::unexpected("Wrong magic code");
}
std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t));
pSize = ntohl(tmp);
return {};
}
uint32_t Header::PacketSize() {
return pSize;
}
+16
View File
@@ -0,0 +1,16 @@
#include <string>
const uint32_t MAGIC = 0xABBA;
class Header {
private:
uint32_t pSize = 0;
public:
Header(const uint32_t pSize);
Header(void);
std::string Encode(void);
std::expected<void, std::string> Decode(const std::string buffer);
uint32_t PacketSize(void);
};
+20
View File
@@ -0,0 +1,20 @@
#include <expected>
#include <string>
#include <cstring>
#include <iostream>
#include <format>
#include <header.hpp>
int main(int argc, char** argv) {
uint32_t size =
Header primary(1021);
auto rawHeader = primary.Encode();
Header second;
second.Decode(rawHeader);
std::cout << std::format("{}\n", second.PacketSize());
assert
}
+587 -509
View File
File diff suppressed because it is too large Load Diff
+619 -546
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,8 +1,8 @@
syntax = "proto3";
package control;
option optimize_for = LITE_RUNTIME;
option cc_generic_services = false;
//option optimize_for = LITE_RUNTIME;
//option cc_generic_services = false;
message Header {
Meta meta = 1;
+11
View File
@@ -0,0 +1,11 @@
#include <cstring>
#include <expected>
#include <iostream>
#include <span>
#include <string>
#include <vector>
class RPCClient {
};
+18
View File
@@ -0,0 +1,18 @@
#include <cstring>
#include <expected>
#include <iostream>
#include <span>
#include <string>
#include <vector>
#include <google/protobuf/message.h>
#include <rcpclient.hpp>
//google::protobuf::Message
std::expected<void, std::string> Transaction(const google::protobuf::Message& m) {
return {};
}
+18 -19
View File
@@ -15,6 +15,12 @@ extern "C" {
#include <span>
#include <iostream>
#include <cstring>
#include <expected>
#include <string>
#include <iostream>
#include <tcpclient.hpp>
TCPClient::TCPClient() {
@@ -25,9 +31,9 @@ TCPClient::TCPClient() {
std::expected<void, std::string> TCPClient::Connect(const std::string naddress, const int port) {
struct sockaddr_in sa;
if (inet_pton(AF_INET, address.c_str(), &(sa.sin_addr)) == 1) {
if (inet_pton(AF_INET, naddress.c_str(), &(sa.sin_addr)) == 1) {
family = AF_INET;
} else if (inet_pton(AF_INET6, address.c_str(), &(sa.sin_addr)) == 1) {
} else if (inet_pton(AF_INET6, naddress.c_str(), &(sa.sin_addr)) == 1) {
family = AF_INET6;
} else {
int errnocopy = errno;
@@ -44,7 +50,7 @@ std::expected<void, std::string> TCPClient::Connect(const std::string naddress,
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
const char* addr = address.data();
const char* addr = naddress.data();
if (inet_pton(AF_INET, addr, &serv_addr.sin_addr) <= 0) {
return std::unexpected("Invalid server IP address");
}
@@ -65,15 +71,6 @@ std::expected<void, std::string> TCPClient::Connect(const std::string naddress,
return {};
}
std::expected<int, std::string> TCPClient::Write(std::span<const std::byte> payload) {
int n = 0;
if ((n = write(sock, payload.data(), payload.size())) < 0) {
return std::unexpected("Write error");
}
return n;
}
std::expected<int, std::string> TCPClient::Write(std::string payload) {
int n = 0;
if ((n = write(sock, payload.data(), payload.size())) < 0) {
@@ -82,16 +79,18 @@ std::expected<int, std::string> TCPClient::Write(std::string payload) {
return n;
}
std::expected<int, std::string> TCPClient::Read(std::vector<std::byte>* buffer) {
int n = 0;
if ((n = read(sock, buffer->data(), buffer->size())) < 0) {
std::expected<int, std::string> TCPClient::Read(std::string& res, int size) {
char buffer[size + 1];
memset(&buffer, 0, size + 1);
int rsize = 0;
if ((rsize = read(sock, &buffer, size)) < 0) {
return std::unexpected("Read error");
}
return n;
res.append(buffer, rsize);
return rsize;
}
std::expected<int, std::string> TCPClient::Read(std::vector<uint8_t>* buffer) {
return read(sock, buffer->data(), buffer->size());
TCPClient::~TCPClient() {
close(sock);
}
+3 -10
View File
@@ -10,16 +10,9 @@ private:
int sock;
int family;
public:
TCPClient();
TCPClient(void);
std::expected<void, std::string> Connect(std::string address, const int port);
std::expected<int, std::string> Write(std::span<const std::byte> payload);
std::expected<int, std::string> Write(std::string payload);
std::expected<int, std::string> Read(std::vector<std::byte>* buffer);
std::expected<int, std::string> Read(std::vector<uint8_t>* buffer);
~TCPClient() {
close(sock);
}
std::expected<int, std::string> Read(std::string& buffer, int size);
~TCPClient(void);
};
+4 -6
View File
@@ -20,15 +20,13 @@ int main( int argc, char** argv) {
return 1;
}
std::vector<uint8_t> buffer;
buffer.resize(2048);
auto rSize = client.Read(&buffer);
std::string buffer;
auto rSize = client.Read(buffer, 8);
if (!rSize) {
std::cerr << rSize.error() << std::endl;
return 1;
}
std::cout << rSize.value() << std::endl;
std::cout << std::format("read {} bytes", rSize.value()) << std::endl;
std::cout << std::format("{}", buffer) << std::endl;
std::string s(buffer.begin(), buffer.end());
std::cout << std::format("{}", s) << std::endl;
}
+20 -20
View File
@@ -13,37 +13,37 @@ extern "C" {
#include <header.hpp>
Header::Header(const uint32_t ipSize) {
pSize = ipSize;
pSize = ipSize;
}
Header::Header(void) {
pSize = 0;
pSize = 0;
}
std::string Header::Encode() {
std::string buffer, tmp;
auto magic = htonl(MAGIC);
tmp = std::string(reinterpret_cast<const char*>(&magic), sizeof(magic));
buffer.append(tmp);
std::string buffer, tmp;
auto magic = htonl(MAGIC);
tmp = std::string(reinterpret_cast<const char*>(&magic), sizeof(magic));
buffer.append(tmp);
auto size = htonl(pSize);
tmp = std::string(reinterpret_cast<const char*>(&size), sizeof(size));
buffer.append(tmp);
return buffer;
auto size = htonl(pSize);
tmp = std::string(reinterpret_cast<const char*>(&size), sizeof(size));
buffer.append(tmp);
return buffer;
}
std::expected<void, std::string> Header::Decode(const std::string rawHeader) {
uint32_t tmp;
std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t));
auto magic = ntohl(tmp);
if (magic != MAGIC) {
return std::unexpected("Wrong magic code");
}
std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t));
pSize = ntohl(tmp);
return {};
uint32_t tmp;
std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t));
auto magic = ntohl(tmp);
if (magic != MAGIC) {
return std::unexpected("Wrong magic code");
}
std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t));
pSize = ntohl(tmp);
return {};
}
uint32_t Header::PacketSize() {
return pSize;
return pSize;
}
+6 -6
View File
@@ -5,12 +5,12 @@ const uint32_t MAGIC = 0xABBA;
class Header {
private:
uint32_t pSize = 0;
uint32_t pSize = 0;
public:
Header(const uint32_t pSize);
Header(void);
std::string Encode(void);
std::expected<void, std::string> Decode(const std::string buffer);
uint32_t PacketSize(void);
Header(const uint32_t pSize);
Header(void);
std::string Encode(void);
std::expected<void, std::string> Decode(const std::string buffer);
uint32_t PacketSize(void);
};
+7 -7
View File
@@ -8,13 +8,13 @@
#include <header.hpp>
int main(int argc, char** argv) {
uint32_t size =
Header primary(1021);
auto rawHeader = primary.Encode();
uint32_t size =
Header primary(1021);
auto rawHeader = primary.Encode();
Header second;
second.Decode(rawHeader);
Header second;
second.Decode(rawHeader);
std::cout << std::format("{}\n", second.PacketSize());
assert
std::cout << std::format("{}\n", second.PacketSize());
assert
}
+7
View File
@@ -0,0 +1,7 @@
class Packet {
std::string meta;
std::string payload;
}