mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-15 07:27:42 -04:00
Reformat code
This commit is contained in:
parent
b89bc2770f
commit
0567908a05
@ -33,14 +33,14 @@ int main(int argc, char* argv[]) {
|
|||||||
|
|
||||||
tlib::socket sock(tlib::socket_domain::AF_INET, tlib::socket_type::RAW, tlib::socket_protocol::ICMP);
|
tlib::socket sock(tlib::socket_domain::AF_INET, tlib::socket_type::RAW, tlib::socket_protocol::ICMP);
|
||||||
|
|
||||||
if(!sock){
|
if (!sock) {
|
||||||
tlib::printf("ls: socket error: %s\n", std::error_message(sock.error()));
|
tlib::printf("ls: socket error: %s\n", std::error_message(sock.error()));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sock.listen(true);
|
sock.listen(true);
|
||||||
|
|
||||||
if(!sock){
|
if (!sock) {
|
||||||
tlib::printf("ls: socket error: %s\n", std::error_message(sock.error()));
|
tlib::printf("ls: socket error: %s\n", std::error_message(sock.error()));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -51,11 +51,11 @@ int main(int argc, char* argv[]) {
|
|||||||
desc.type = tlib::icmp::type::ECHO_REQUEST;
|
desc.type = tlib::icmp::type::ECHO_REQUEST;
|
||||||
desc.code = 0;
|
desc.code = 0;
|
||||||
|
|
||||||
for(size_t i = 0; i < N; ++i){
|
for (size_t i = 0; i < N; ++i) {
|
||||||
auto packet = sock.prepare_packet(&desc);
|
auto packet = sock.prepare_packet(&desc);
|
||||||
|
|
||||||
if (!sock) {
|
if (!sock) {
|
||||||
if(sock.error() == std::ERROR_SOCKET_TIMEOUT){
|
if (sock.error() == std::ERROR_SOCKET_TIMEOUT) {
|
||||||
tlib::printf("Unable to resolve MAC address for target IP\n");
|
tlib::printf("Unable to resolve MAC address for target IP\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -77,11 +77,11 @@ int main(int argc, char* argv[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto before = tlib::ms_time();
|
auto before = tlib::ms_time();
|
||||||
auto after = before;
|
auto after = before;
|
||||||
|
|
||||||
while(true){
|
while (true) {
|
||||||
// Make sure we don't wait for more than the timeout
|
// Make sure we don't wait for more than the timeout
|
||||||
if(after > before + timeout_ms){
|
if (after > before + timeout_ms) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ int main(int argc, char* argv[]) {
|
|||||||
|
|
||||||
auto p = sock.wait_for_packet(remaining);
|
auto p = sock.wait_for_packet(remaining);
|
||||||
if (!sock) {
|
if (!sock) {
|
||||||
if(sock.error() == std::ERROR_SOCKET_TIMEOUT){
|
if (sock.error() == std::ERROR_SOCKET_TIMEOUT) {
|
||||||
tlib::printf("%s unreachable\n", ip.c_str());
|
tlib::printf("%s unreachable\n", ip.c_str());
|
||||||
handled = true;
|
handled = true;
|
||||||
sock.clear();
|
sock.clear();
|
||||||
@ -104,7 +104,7 @@ int main(int argc, char* argv[]) {
|
|||||||
|
|
||||||
auto command_type = static_cast<tlib::icmp::type>(icmp_header->type);
|
auto command_type = static_cast<tlib::icmp::type>(icmp_header->type);
|
||||||
|
|
||||||
if(command_type == tlib::icmp::type::ECHO_REPLY){
|
if (command_type == tlib::icmp::type::ECHO_REPLY) {
|
||||||
tlib::printf("Reply received from %s\n", ip.c_str());
|
tlib::printf("Reply received from %s\n", ip.c_str());
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
@ -114,14 +114,14 @@ int main(int argc, char* argv[]) {
|
|||||||
tlib::release_packet(p);
|
tlib::release_packet(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(handled){
|
if (handled) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
after = tlib::ms_time();
|
after = tlib::ms_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i < N - 1){
|
if (i < N - 1) {
|
||||||
tlib::sleep_ms(1000);
|
tlib::sleep_ms(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,13 +41,13 @@ struct socket {
|
|||||||
* \brief Indicates if the socket is open or not
|
* \brief Indicates if the socket is open or not
|
||||||
* \return true if the socket is open, false otherwise
|
* \return true if the socket is open, false otherwise
|
||||||
*/
|
*/
|
||||||
bool open() const ;
|
bool open() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Indicates if everything is in order
|
* \brief Indicates if everything is in order
|
||||||
* \return true if everything is good, false otherwise
|
* \return true if everything is good, false otherwise
|
||||||
*/
|
*/
|
||||||
bool good() const ;
|
bool good() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Indicates if everything is in order
|
* \brief Indicates if everything is in order
|
||||||
@ -59,7 +59,7 @@ struct socket {
|
|||||||
* \brief Returns the error code, if any
|
* \brief Returns the error code, if any
|
||||||
* \return the error code if any, 0 otherwise
|
* \return the error code if any, 0 otherwise
|
||||||
*/
|
*/
|
||||||
size_t error() const ;
|
size_t error() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Clear the error code
|
* \brief Clear the error code
|
||||||
|
124
tlib/src/net.cpp
124
tlib/src/net.cpp
@ -4,61 +4,62 @@
|
|||||||
// (See accompanying file LICENSE or copy at
|
// (See accompanying file LICENSE or copy at
|
||||||
// http://www.opensource.org/licenses/MIT)
|
// http://www.opensource.org/licenses/MIT)
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
#include "tlib/net.hpp"
|
#include "tlib/net.hpp"
|
||||||
#include "tlib/malloc.hpp"
|
#include "tlib/malloc.hpp"
|
||||||
|
|
||||||
std::expected<size_t> tlib::socket_open(socket_domain domain, socket_type type, socket_protocol protocol){
|
std::expected<size_t> tlib::socket_open(socket_domain domain, socket_type type, socket_protocol protocol) {
|
||||||
int64_t fd;
|
int64_t fd;
|
||||||
asm volatile("mov rax, 0x3000; mov rbx, %[type]; mov rcx, %[type]; mov rdx, %[protocol]; int 50; mov %[fd], rax"
|
asm volatile("mov rax, 0x3000; mov rbx, %[type]; mov rcx, %[type]; mov rdx, %[protocol]; int 50; mov %[fd], rax"
|
||||||
: [fd] "=m" (fd)
|
: [fd] "=m"(fd)
|
||||||
: [domain] "g" (static_cast<size_t>(domain)), [type] "g" (static_cast<size_t>(type)), [protocol] "g" (static_cast<size_t>(protocol))
|
: [domain] "g"(static_cast<size_t>(domain)), [type] "g"(static_cast<size_t>(type)), [protocol] "g"(static_cast<size_t>(protocol))
|
||||||
: "rax", "rbx", "rcx", "rdx");
|
: "rax", "rbx", "rcx", "rdx");
|
||||||
|
|
||||||
if(fd < 0){
|
if (fd < 0) {
|
||||||
return std::make_expected_from_error<size_t, size_t>(-fd);
|
return std::make_expected_from_error<size_t, size_t>(-fd);
|
||||||
} else {
|
} else {
|
||||||
return std::make_expected<size_t>(fd);
|
return std::make_expected<size_t>(fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlib::socket_close(size_t fd){
|
void tlib::socket_close(size_t fd) {
|
||||||
asm volatile("mov rax, 0x3001; mov rbx, %[fd]; int 50;"
|
asm volatile("mov rax, 0x3001; mov rbx, %[fd]; int 50;"
|
||||||
: /* No outputs */
|
: /* No outputs */
|
||||||
: [fd] "g" (fd)
|
: [fd] "g"(fd)
|
||||||
: "rax", "rbx");
|
: "rax", "rbx");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::expected<tlib::packet> tlib::prepare_packet(size_t socket_fd, void* desc){
|
std::expected<tlib::packet> tlib::prepare_packet(size_t socket_fd, void* desc) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t fd;
|
int64_t fd;
|
||||||
uint64_t index;
|
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;"
|
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)
|
: [fd] "=m"(fd), [index] "=m"(index)
|
||||||
: [socket] "g" (socket_fd), [desc] "g" (reinterpret_cast<size_t>(desc)), [buffer] "g" (reinterpret_cast<size_t>(buffer))
|
: [socket] "g"(socket_fd), [desc] "g"(reinterpret_cast<size_t>(desc)), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
||||||
: "rax", "rbx", "rcx", "rdx");
|
: "rax", "rbx", "rcx", "rdx");
|
||||||
|
|
||||||
if(fd < 0){
|
if (fd < 0) {
|
||||||
return std::make_expected_from_error<tlib::packet, size_t>(-fd);
|
return std::make_expected_from_error<tlib::packet, size_t>(-fd);
|
||||||
} else {
|
} else {
|
||||||
tlib::packet p;
|
tlib::packet p;
|
||||||
p.fd = fd;
|
p.fd = fd;
|
||||||
p.index = index;
|
p.index = index;
|
||||||
p.payload = static_cast<char*>(buffer);
|
p.payload = static_cast<char*>(buffer);
|
||||||
return std::make_expected<packet>(p);
|
return std::make_expected<packet>(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::expected<void> tlib::finalize_packet(size_t socket_fd, tlib::packet p){
|
std::expected<void> tlib::finalize_packet(size_t socket_fd, tlib::packet p) {
|
||||||
auto packet_fd = p.fd;
|
auto packet_fd = p.fd;
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
asm volatile("mov rax, 0x3003; mov rbx, %[socket]; mov rcx, %[packet]; int 50; mov %[code], rax"
|
asm volatile("mov rax, 0x3003; mov rbx, %[socket]; mov rcx, %[packet]; int 50; mov %[code], rax"
|
||||||
: [code] "=m" (code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd), [packet] "g" (packet_fd)
|
: [socket] "g"(socket_fd), [packet] "g"(packet_fd)
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if(code < 0){
|
if (code < 0) {
|
||||||
return std::make_expected_from_error<void, size_t>(-code);
|
return std::make_expected_from_error<void, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
return std::make_expected();
|
return std::make_expected();
|
||||||
@ -67,80 +68,81 @@ std::expected<void> tlib::finalize_packet(size_t socket_fd, tlib::packet p){
|
|||||||
free(p.payload);
|
free(p.payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::expected<void> tlib::listen(size_t socket_fd, bool l){
|
std::expected<void> tlib::listen(size_t socket_fd, bool l) {
|
||||||
int64_t code;
|
int64_t code;
|
||||||
asm volatile("mov rax, 0x3004; mov rbx, %[socket]; mov rcx, %[listen]; int 50; mov %[code], rax"
|
asm volatile("mov rax, 0x3004; mov rbx, %[socket]; mov rcx, %[listen]; int 50; mov %[code], rax"
|
||||||
: [code] "=m" (code)
|
: [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd), [listen] "g" (size_t(l))
|
: [socket] "g"(socket_fd), [listen] "g"(size_t(l))
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if(code < 0){
|
if (code < 0) {
|
||||||
return std::make_expected_from_error<void, size_t>(-code);
|
return std::make_expected_from_error<void, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
return std::make_expected();
|
return std::make_expected();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd){
|
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
uint64_t payload;
|
uint64_t payload;
|
||||||
asm volatile("mov rax, 0x3005; mov rbx, %[socket]; mov rcx, %[buffer]; int 50; mov %[code], rax; mov %[payload], rbx;"
|
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)
|
: [payload] "=m"(payload), [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd), [buffer] "g" (reinterpret_cast<size_t>(buffer))
|
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer))
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if(code < 0){
|
if (code < 0) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return std::make_expected_from_error<packet, size_t>(-code);
|
return std::make_expected_from_error<packet, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
tlib::packet p;
|
tlib::packet p;
|
||||||
p.index = code;
|
p.index = code;
|
||||||
p.payload = reinterpret_cast<char*>(payload);
|
p.payload = reinterpret_cast<char*>(payload);
|
||||||
return std::make_expected<packet>(p);
|
return std::make_expected<packet>(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd, size_t ms){
|
std::expected<tlib::packet> tlib::wait_for_packet(size_t socket_fd, size_t ms) {
|
||||||
auto buffer = malloc(2048);
|
auto buffer = malloc(2048);
|
||||||
|
|
||||||
int64_t code;
|
int64_t code;
|
||||||
uint64_t payload;
|
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;"
|
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)
|
: [payload] "=m"(payload), [code] "=m"(code)
|
||||||
: [socket] "g" (socket_fd), [buffer] "g" (reinterpret_cast<size_t>(buffer)), [ms] "g" (ms)
|
: [socket] "g"(socket_fd), [buffer] "g"(reinterpret_cast<size_t>(buffer)), [ms] "g"(ms)
|
||||||
: "rax", "rbx", "rcx");
|
: "rax", "rbx", "rcx");
|
||||||
|
|
||||||
if(code < 0){
|
if (code < 0) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return std::make_expected_from_error<packet, size_t>(-code);
|
return std::make_expected_from_error<packet, size_t>(-code);
|
||||||
} else {
|
} else {
|
||||||
tlib::packet p;
|
tlib::packet p;
|
||||||
p.index = code;
|
p.index = code;
|
||||||
p.payload = reinterpret_cast<char*>(payload);
|
p.payload = reinterpret_cast<char*>(payload);
|
||||||
return std::make_expected<packet>(p);
|
return std::make_expected<packet>(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlib::release_packet(packet& packet){
|
void tlib::release_packet(packet& packet) {
|
||||||
if(packet.payload){
|
if (packet.payload) {
|
||||||
free(packet.payload);
|
free(packet.payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::socket::socket(socket_domain domain, socket_type type, socket_protocol protocol) : domain(domain), type(type), protocol(protocol), fd(0), error_code(0) {
|
tlib::socket::socket(socket_domain domain, socket_type type, socket_protocol protocol)
|
||||||
|
: domain(domain), type(type), protocol(protocol), fd(0), error_code(0) {
|
||||||
auto open_status = tlib::socket_open(domain, type, protocol);
|
auto open_status = tlib::socket_open(domain, type, protocol);
|
||||||
|
|
||||||
if(open_status.valid()){
|
if (open_status.valid()) {
|
||||||
fd = *open_status;
|
fd = *open_status;
|
||||||
} else {
|
} else {
|
||||||
error_code = open_status.error();
|
error_code = open_status.error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::socket::~socket(){
|
tlib::socket::~socket() {
|
||||||
if(fd){
|
if (fd) {
|
||||||
tlib::socket_close(fd);
|
tlib::socket_close(fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +155,7 @@ bool tlib::socket::good() const {
|
|||||||
return error_code == 0;
|
return error_code == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::socket::operator bool(){
|
tlib::socket::operator bool() {
|
||||||
return good();
|
return good();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,29 +163,29 @@ size_t tlib::socket::error() const {
|
|||||||
return error_code;
|
return error_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlib::socket::clear(){
|
void tlib::socket::clear() {
|
||||||
error_code = 0;
|
error_code = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlib::socket::listen(bool l){
|
void tlib::socket::listen(bool l) {
|
||||||
if(!good() || !open()){
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::listen(fd, l);
|
auto status = tlib::listen(fd, l);
|
||||||
if(!status){
|
if (!status) {
|
||||||
error_code = status.error();
|
error_code = status.error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::packet tlib::socket::prepare_packet(void* desc){
|
tlib::packet tlib::socket::prepare_packet(void* desc) {
|
||||||
if(!good() || !open()){
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto packet = tlib::prepare_packet(fd, desc);
|
auto packet = tlib::prepare_packet(fd, desc);
|
||||||
|
|
||||||
if(!packet){
|
if (!packet) {
|
||||||
error_code = packet.error();
|
error_code = packet.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
} else {
|
} else {
|
||||||
@ -191,25 +193,25 @@ tlib::packet tlib::socket::prepare_packet(void* desc){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tlib::socket::finalize_packet(tlib::packet p){
|
void tlib::socket::finalize_packet(tlib::packet p) {
|
||||||
if(!good() || !open()){
|
if (!good() || !open()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto status = tlib::finalize_packet(fd, p);
|
auto status = tlib::finalize_packet(fd, p);
|
||||||
if(!status){
|
if (!status) {
|
||||||
error_code = status.error();
|
error_code = status.error();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::packet tlib::socket::wait_for_packet(){
|
tlib::packet tlib::socket::wait_for_packet() {
|
||||||
if(!good() || !open()){
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto p = tlib::wait_for_packet(fd);
|
auto p = tlib::wait_for_packet(fd);
|
||||||
|
|
||||||
if(!p){
|
if (!p) {
|
||||||
error_code = p.error();
|
error_code = p.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
} else {
|
} else {
|
||||||
@ -217,14 +219,14 @@ tlib::packet tlib::socket::wait_for_packet(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tlib::packet tlib::socket::wait_for_packet(size_t ms){
|
tlib::packet tlib::socket::wait_for_packet(size_t ms) {
|
||||||
if(!good() || !open()){
|
if (!good() || !open()) {
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto p = tlib::wait_for_packet(fd, ms);
|
auto p = tlib::wait_for_packet(fd, ms);
|
||||||
|
|
||||||
if(!p){
|
if (!p) {
|
||||||
error_code = p.error();
|
error_code = p.error();
|
||||||
return tlib::packet();
|
return tlib::packet();
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user