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 = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
sbin_PROGRAMS = helmetd$(EXEEXT) sbin_PROGRAMS = helmetd$(EXEEXT)
noinst_PROGRAMS = udpclient_test$(EXEEXT) service_test$(EXEEXT) \ noinst_PROGRAMS = tcpclient_test$(EXEEXT) udpclient_test$(EXEEXT) \
tunclient_test$(EXEEXT) message_test$(EXEEXT) service_test$(EXEEXT) tunclient_test$(EXEEXT) \
message_test$(EXEEXT)
subdir = . subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -108,7 +109,8 @@ am__installdirs = "$(DESTDIR)$(sbindir)"
PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS) PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \ am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) hello.pb.$(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_OBJECTS = $(am_helmetd_OBJECTS)
helmetd_LDADD = $(LDADD) helmetd_LDADD = $(LDADD)
am_message_test_OBJECTS = message_test.$(OBJEXT) hello.pb.$(OBJEXT) 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.$(OBJEXT) interface.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS) service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD) 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) \ am_tunclient_test_OBJECTS = tunclient_test.$(OBJEXT) \
tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT) tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT)
tunclient_test_OBJECTS = $(am_tunclient_test_OBJECTS) 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_0 = @echo " CCLD " $@;
am__v_CCLD_1 = am__v_CCLD_1 =
SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \ SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \ $(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(udpclient_test_SOURCES) $(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \ DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \ $(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(udpclient_test_SOURCES) $(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
am__can_run_installinfo = \ am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \ case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \ n|no|NO) false;; \
@@ -251,7 +257,7 @@ INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LDFLAGS = -pthread LDFLAGS = -pthread
LIBOBJS = LIBOBJS =
LIBS = -Wl,--as-need -lprotobuf-lite LIBS = -Wl,--as-need -lprotobuf
LTLIBOBJS = LTLIBOBJS =
MAKEINFO = ${SHELL} '/home/ziggi/Projects/tcpserv09/missing' makeinfo MAKEINFO = ${SHELL} '/home/ziggi/Projects/tcpserv09/missing' makeinfo
MKDIR_P = /bin/mkdir -p MKDIR_P = /bin/mkdir -p
@@ -324,7 +330,9 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \ hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
resolver.cpp resolver.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_test_SOURCES = tunclient_test.cpp \
tunclient.cpp tunclient.hpp \ tunclient.cpp tunclient.hpp \
@@ -341,6 +349,11 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
udpclient_test.cpp udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \ message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h 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) @rm -f service_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(service_test_OBJECTS) $(service_test_LDADD) $(LIBS) $(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) tunclient_test$(EXEEXT): $(tunclient_test_OBJECTS) $(tunclient_test_DEPENDENCIES) $(EXTRA_tunclient_test_DEPENDENCIES)
@rm -f tunclient_test$(EXEEXT) @rm -f tunclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tunclient_test_OBJECTS) $(tunclient_test_LDADD) $(LIBS) $(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 CXXFLAGS = -std=c++23 -Wall -I. -pthread -D_GNU_SOURCE=1
LDFLAGS = -pthread LDFLAGS = -pthread
LIBS = -Wl,--as-need -lprotobuf-lite LIBS = -Wl,--as-need -lprotobuf
sbin_PROGRAMS = helmetd sbin_PROGRAMS = helmetd
@@ -14,9 +14,13 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \ hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
resolver.cpp resolver.hpp \ resolver.cpp resolver.hpp \
iprouter.cpp iprouter.hpp iprouter.cpp iprouter.hpp \
tcpclient.cpp tcpclient.hpp \
rpcclient.cpp rpcclient.hpp
noinst_PROGRAMS = \ noinst_PROGRAMS = \
tcpclient_test \
udpclient_test \ udpclient_test \
service_test \ service_test \
tunclient_test \ tunclient_test \
@@ -38,6 +42,12 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
udpclient_test.cpp udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \ message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h hello.pb.cc hello.pb.h
+26 -9
View File
@@ -89,8 +89,9 @@ NORMAL_UNINSTALL = :
PRE_UNINSTALL = : PRE_UNINSTALL = :
POST_UNINSTALL = : POST_UNINSTALL = :
sbin_PROGRAMS = helmetd$(EXEEXT) sbin_PROGRAMS = helmetd$(EXEEXT)
noinst_PROGRAMS = udpclient_test$(EXEEXT) service_test$(EXEEXT) \ noinst_PROGRAMS = tcpclient_test$(EXEEXT) udpclient_test$(EXEEXT) \
tunclient_test$(EXEEXT) message_test$(EXEEXT) service_test$(EXEEXT) tunclient_test$(EXEEXT) \
message_test$(EXEEXT)
subdir = . subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -108,7 +109,8 @@ am__installdirs = "$(DESTDIR)$(sbindir)"
PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS) PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \ am_helmetd_OBJECTS = helmetd.$(OBJEXT) tunclient.$(OBJEXT) \
service.$(OBJEXT) interface.$(OBJEXT) hello.pb.$(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_OBJECTS = $(am_helmetd_OBJECTS)
helmetd_LDADD = $(LDADD) helmetd_LDADD = $(LDADD)
am_message_test_OBJECTS = message_test.$(OBJEXT) hello.pb.$(OBJEXT) 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.$(OBJEXT) interface.$(OBJEXT)
service_test_OBJECTS = $(am_service_test_OBJECTS) service_test_OBJECTS = $(am_service_test_OBJECTS)
service_test_LDADD = $(LDADD) 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) \ am_tunclient_test_OBJECTS = tunclient_test.$(OBJEXT) \
tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT) tunclient.$(OBJEXT) service.$(OBJEXT) interface.$(OBJEXT)
tunclient_test_OBJECTS = $(am_tunclient_test_OBJECTS) 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_0 = @echo " CCLD " $@;
am__v_CCLD_1 = am__v_CCLD_1 =
SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \ SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \ $(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(udpclient_test_SOURCES) $(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \ DIST_SOURCES = $(helmetd_SOURCES) $(message_test_SOURCES) \
$(service_test_SOURCES) $(tunclient_test_SOURCES) \ $(service_test_SOURCES) $(tcpclient_test_SOURCES) \
$(udpclient_test_SOURCES) $(tunclient_test_SOURCES) $(udpclient_test_SOURCES)
am__can_run_installinfo = \ am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \ case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \ n|no|NO) false;; \
@@ -251,7 +257,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = -pthread LDFLAGS = -pthread
LIBOBJS = @LIBOBJS@ LIBOBJS = @LIBOBJS@
LIBS = -Wl,--as-need -lprotobuf-lite LIBS = -Wl,--as-need -lprotobuf
LTLIBOBJS = @LTLIBOBJS@ LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@ MKDIR_P = @MKDIR_P@
@@ -324,7 +330,9 @@ helmetd_SOURCES = helmetd.cpp \
hello.pb.cc hello.pb.h \ hello.pb.cc hello.pb.h \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
resolver.cpp resolver.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_test_SOURCES = tunclient_test.cpp \
tunclient.cpp tunclient.hpp \ tunclient.cpp tunclient.hpp \
@@ -341,6 +349,11 @@ udpclient_test_SOURCES = \
udpclient.cpp udpclient.hpp \ udpclient.cpp udpclient.hpp \
udpclient_test.cpp udpclient_test.cpp
tcpclient_test_SOURCES = \
resolver.cpp resolver.hpp \
tcpclient.cpp tcpclient.hpp \
tcpclient_test.cpp
message_test_SOURCES = message_test.cpp \ message_test_SOURCES = message_test.cpp \
hello.pb.cc hello.pb.h 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) @rm -f service_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(service_test_OBJECTS) $(service_test_LDADD) $(LIBS) $(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) tunclient_test$(EXEEXT): $(tunclient_test_OBJECTS) $(tunclient_test_DEPENDENCIES) $(EXTRA_tunclient_test_DEPENDENCIES)
@rm -f tunclient_test$(EXEEXT) @rm -f tunclient_test$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(tunclient_test_OBJECTS) $(tunclient_test_LDADD) $(LIBS) $(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
+644 -571
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,8 +1,8 @@
syntax = "proto3"; syntax = "proto3";
package control; package control;
option optimize_for = LITE_RUNTIME; //option optimize_for = LITE_RUNTIME;
option cc_generic_services = false; //option cc_generic_services = false;
message Header { message Header {
Meta meta = 1; 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 <span>
#include <iostream> #include <iostream>
#include <cstring>
#include <expected>
#include <string>
#include <iostream>
#include <tcpclient.hpp> #include <tcpclient.hpp>
TCPClient::TCPClient() { TCPClient::TCPClient() {
@@ -25,9 +31,9 @@ TCPClient::TCPClient() {
std::expected<void, std::string> TCPClient::Connect(const std::string naddress, const int port) { std::expected<void, std::string> TCPClient::Connect(const std::string naddress, const int port) {
struct sockaddr_in sa; 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; 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; family = AF_INET6;
} else { } else {
int errnocopy = errno; 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_family = AF_INET;
serv_addr.sin_port = htons(port); 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) { if (inet_pton(AF_INET, addr, &serv_addr.sin_addr) <= 0) {
return std::unexpected("Invalid server IP address"); return std::unexpected("Invalid server IP address");
} }
@@ -65,15 +71,6 @@ std::expected<void, std::string> TCPClient::Connect(const std::string naddress,
return {}; 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) { std::expected<int, std::string> TCPClient::Write(std::string payload) {
int n = 0; int n = 0;
if ((n = write(sock, payload.data(), payload.size())) < 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; return n;
} }
std::expected<int, std::string> TCPClient::Read(std::vector<std::byte>* buffer) { std::expected<int, std::string> TCPClient::Read(std::string& res, int size) {
int n = 0; char buffer[size + 1];
if ((n = read(sock, buffer->data(), buffer->size())) < 0) { memset(&buffer, 0, size + 1);
int rsize = 0;
if ((rsize = read(sock, &buffer, size)) < 0) {
return std::unexpected("Read error"); 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) { TCPClient::~TCPClient() {
return read(sock, buffer->data(), buffer->size()); close(sock);
} }
+3 -10
View File
@@ -10,16 +10,9 @@ private:
int sock; int sock;
int family; int family;
public: public:
TCPClient(); TCPClient(void);
std::expected<void, std::string> Connect(std::string address, const int port); 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> Write(std::string payload);
std::expected<int, std::string> Read(std::string& buffer, int size);
std::expected<int, std::string> Read(std::vector<std::byte>* buffer); ~TCPClient(void);
std::expected<int, std::string> Read(std::vector<uint8_t>* buffer);
~TCPClient() {
close(sock);
}
}; };
+4 -6
View File
@@ -20,15 +20,13 @@ int main( int argc, char** argv) {
return 1; return 1;
} }
std::vector<uint8_t> buffer; std::string buffer;
buffer.resize(2048); auto rSize = client.Read(buffer, 8);
auto rSize = client.Read(&buffer);
if (!rSize) { if (!rSize) {
std::cerr << rSize.error() << std::endl; std::cerr << rSize.error() << std::endl;
return 1; 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> #include <header.hpp>
Header::Header(const uint32_t ipSize) { Header::Header(const uint32_t ipSize) {
pSize = ipSize; pSize = ipSize;
} }
Header::Header(void) { Header::Header(void) {
pSize = 0; pSize = 0;
} }
std::string Header::Encode() { std::string Header::Encode() {
std::string buffer, tmp; std::string buffer, tmp;
auto magic = htonl(MAGIC); auto magic = htonl(MAGIC);
tmp = std::string(reinterpret_cast<const char*>(&magic), sizeof(magic)); tmp = std::string(reinterpret_cast<const char*>(&magic), sizeof(magic));
buffer.append(tmp); buffer.append(tmp);
auto size = htonl(pSize); auto size = htonl(pSize);
tmp = std::string(reinterpret_cast<const char*>(&size), sizeof(size)); tmp = std::string(reinterpret_cast<const char*>(&size), sizeof(size));
buffer.append(tmp); buffer.append(tmp);
return buffer; return buffer;
} }
std::expected<void, std::string> Header::Decode(const std::string rawHeader) { std::expected<void, std::string> Header::Decode(const std::string rawHeader) {
uint32_t tmp; uint32_t tmp;
std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t)); std::memcpy(&tmp, rawHeader.data(), sizeof(uint32_t));
auto magic = ntohl(tmp); auto magic = ntohl(tmp);
if (magic != MAGIC) { if (magic != MAGIC) {
return std::unexpected("Wrong magic code"); return std::unexpected("Wrong magic code");
} }
std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t)); std::memcpy(&tmp, rawHeader.data() + sizeof(uint32_t), sizeof(uint32_t));
pSize = ntohl(tmp); pSize = ntohl(tmp);
return {}; return {};
} }
uint32_t Header::PacketSize() { uint32_t Header::PacketSize() {
return pSize; return pSize;
} }
+6 -6
View File
@@ -5,12 +5,12 @@ const uint32_t MAGIC = 0xABBA;
class Header { class Header {
private: private:
uint32_t pSize = 0; uint32_t pSize = 0;
public: public:
Header(const uint32_t pSize); Header(const uint32_t pSize);
Header(void); Header(void);
std::string Encode(void); std::string Encode(void);
std::expected<void, std::string> Decode(const std::string buffer); std::expected<void, std::string> Decode(const std::string buffer);
uint32_t PacketSize(void); uint32_t PacketSize(void);
}; };
+7 -7
View File
@@ -8,13 +8,13 @@
#include <header.hpp> #include <header.hpp>
int main(int argc, char** argv) { int main(int argc, char** argv) {
uint32_t size = uint32_t size =
Header primary(1021); Header primary(1021);
auto rawHeader = primary.Encode(); auto rawHeader = primary.Encode();
Header second; Header second;
second.Decode(rawHeader); second.Decode(rawHeader);
std::cout << std::format("{}\n", second.PacketSize()); std::cout << std::format("{}\n", second.PacketSize());
assert assert
} }
+7
View File
@@ -0,0 +1,7 @@
class Packet {
std::string meta;
std::string payload;
}