Reformat code

This commit is contained in:
Baptiste Wicht 2016-09-11 20:08:41 +02:00
parent b89bc2770f
commit 0567908a05
3 changed files with 77 additions and 75 deletions

View File

@ -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);
} }
} }

View File

@ -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

View File

@ -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 {