diff --git a/tlib/src/net.cpp b/tlib/src/net.cpp index e3df28a6..36572ed3 100644 --- a/tlib/src/net.cpp +++ b/tlib/src/net.cpp @@ -21,10 +21,10 @@ tlib::packet& tlib::packet::operator=(packet&& rhs) { this->fd = rhs.fd; this->payload = rhs.payload; this->index = rhs.index; - + rhs.payload = nullptr; } - + return *this; } @@ -40,7 +40,7 @@ std::expected tlib::socket_open(socket_domain domain, socket_type type, : [fd] "=m"(fd) : [domain] "g"(static_cast(domain)), [type] "g"(static_cast(type)), [protocol] "g"(static_cast(protocol)) : "rax", "rbx", "rcx", "rdx"); - + if (fd < 0) { return std::make_expected_from_error(-fd); } else { @@ -57,15 +57,16 @@ void tlib::socket_close(size_t fd) { std::expected tlib::prepare_packet(size_t socket_fd, void* desc) { auto buffer = malloc(2048); - + int64_t fd; uint64_t index; asm volatile("mov rax, 0x3002; mov rbx, %[socket]; mov rcx, %[desc]; mov rdx, %[buffer]; int 50; mov %[fd], rax; mov %[index], rbx;" : [fd] "=m"(fd), [index] "=m"(index) : [socket] "g"(socket_fd), [desc] "g"(reinterpret_cast(desc)), [buffer] "g"(reinterpret_cast(buffer)) : "rax", "rbx", "rcx", "rdx"); - + if (fd < 0) { + free(buffer); return std::make_expected_from_error(-fd); } else { tlib::packet p; @@ -78,13 +79,13 @@ std::expected tlib::prepare_packet(size_t socket_fd, void* desc) { std::expected tlib::finalize_packet(size_t socket_fd, const tlib::packet& p) { auto packet_fd = p.fd; - + int64_t code; asm volatile("mov rax, 0x3003; mov rbx, %[socket]; mov rcx, %[packet]; int 50; mov %[code], rax" : [code] "=m"(code) : [socket] "g"(socket_fd), [packet] "g"(packet_fd) : "rax", "rbx", "rcx"); - + if (code < 0) { return std::make_expected_from_error(-code); } else { @@ -98,7 +99,7 @@ std::expected tlib::listen(size_t socket_fd, bool l) { : [code] "=m"(code) : [socket] "g"(socket_fd), [listen] "g"(size_t(l)) : "rax", "rbx", "rcx"); - + if (code < 0) { return std::make_expected_from_error(-code); } else { @@ -112,7 +113,7 @@ std::expected tlib::client_bind(size_t socket_fd) { : [code] "=m"(code) : [socket] "g"(socket_fd) : "rax", "rbx", "rcx"); - + if (code < 0) { return std::make_unexpected(-code); } else { @@ -126,7 +127,7 @@ std::expected tlib::connect(size_t socket_fd, tlib::ip::address server, : [code] "=m"(code) : [socket] "g" (socket_fd), [ip] "g" (size_t(server.raw_address)), [port] "g" (port) : "rax", "rbx", "rcx", "rdx"); - + if (code < 0) { return std::make_unexpected(-code); } else { @@ -140,7 +141,7 @@ std::expected tlib::disconnect(size_t socket_fd) { : [code] "=m"(code) : [socket] "g" (socket_fd) : "rax", "rbx"); - + if (code < 0) { return std::make_unexpected(-code); } else { @@ -150,14 +151,14 @@ std::expected tlib::disconnect(size_t socket_fd) { std::expected tlib::wait_for_packet(size_t socket_fd) { auto buffer = malloc(2048); - + int64_t code; uint64_t payload; asm volatile("mov rax, 0x3005; mov rbx, %[socket]; mov rcx, %[buffer]; int 50; mov %[code], rax; mov %[payload], rbx;" : [payload] "=m"(payload), [code] "=m"(code) : [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast(buffer)) : "rax", "rbx", "rcx"); - + if (code < 0) { free(buffer); return std::make_expected_from_error(-code); @@ -171,14 +172,14 @@ std::expected tlib::wait_for_packet(size_t socket_fd) { std::expected tlib::wait_for_packet(size_t socket_fd, size_t ms) { auto buffer = malloc(2048); - + int64_t code; uint64_t payload; asm volatile("mov rax, 0x3006; mov rbx, %[socket]; mov rcx, %[buffer]; mov rdx, %[ms]; int 50; mov %[code], rax; mov %[payload], rbx;" : [payload] "=m"(payload), [code] "=m"(code) : [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast(buffer)), [ms] "g"(ms) : "rax", "rbx", "rcx"); - + if (code < 0) { free(buffer); return std::make_expected_from_error(-code); @@ -191,15 +192,15 @@ std::expected tlib::wait_for_packet(size_t socket_fd, size_t ms) { } tlib::socket::socket(socket_domain domain, socket_type type, socket_protocol protocol) - : domain(domain), type(type), protocol(protocol), fd(0), error_code(0) { +: domain(domain), type(type), protocol(protocol), fd(0), error_code(0) { auto open_status = tlib::socket_open(domain, type, protocol); - + if (open_status.valid()) { fd = *open_status; } else { error_code = open_status.error(); } - + local_port = 0; } @@ -207,7 +208,7 @@ tlib::socket::~socket() { if(connected()){ disconnect(); } - + if (fd) { tlib::socket_close(fd); } @@ -241,7 +242,7 @@ void tlib::socket::listen(bool l) { if (!good() || !open()) { return; } - + auto status = tlib::listen(fd, l); if (!status) { error_code = status.error(); @@ -252,12 +253,12 @@ void tlib::socket::client_bind() { if (!good() || !open()) { return; } - + auto status = tlib::client_bind(fd); if (!status) { error_code = status.error(); } - + local_port = *status; } @@ -265,7 +266,7 @@ void tlib::socket::connect(tlib::ip::address server, size_t port) { if (!good() || !open()) { return; } - + auto status = tlib::connect(fd, server, port); if (status) { _connected = true; @@ -279,13 +280,13 @@ void tlib::socket::disconnect() { if (!good() || !open()) { return; } - + if(!connected()){ return; } - + auto status = tlib::disconnect(fd); - + if(status){ _connected = false; } else { @@ -297,9 +298,9 @@ tlib::packet tlib::socket::prepare_packet(void* desc) { if (!good() || !open()) { return tlib::packet(); } - + auto packet = tlib::prepare_packet(fd, desc); - + if (!packet) { error_code = packet.error(); return tlib::packet(); @@ -312,7 +313,7 @@ void tlib::socket::finalize_packet(const tlib::packet& p) { if (!good() || !open()) { return; } - + auto status = tlib::finalize_packet(fd, p); if (!status) { error_code = status.error(); @@ -323,9 +324,9 @@ tlib::packet tlib::socket::wait_for_packet() { if (!good() || !open()) { return tlib::packet(); } - + auto p = tlib::wait_for_packet(fd); - + if (!p) { error_code = p.error(); return tlib::packet(); @@ -338,9 +339,9 @@ tlib::packet tlib::socket::wait_for_packet(size_t ms) { if (!good() || !open()) { return tlib::packet(); } - + auto p = tlib::wait_for_packet(fd, ms); - + if (!p) { error_code = p.error(); return tlib::packet();