working commit
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+619
-546
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -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;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
#include <cstring>
|
||||
#include <expected>
|
||||
#include <iostream>
|
||||
#include <span>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
class RPCClient {
|
||||
};
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
|
||||
class Packet {
|
||||
std::string meta;
|
||||
std::string payload;
|
||||
}
|
||||
Reference in New Issue
Block a user