mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-09 12:31:06 -04:00
Fix containers of packets
This commit is contained in:
parent
0ec1826a63
commit
cf8ba31cee
@ -9,7 +9,7 @@
|
||||
#define NET_SOCKET_H
|
||||
|
||||
#include <types.hpp>
|
||||
#include <vector.hpp>
|
||||
#include <queue.hpp>
|
||||
#include <algorithms.hpp>
|
||||
#include <circular_buffer.hpp>
|
||||
#include <type_traits.hpp>
|
||||
@ -38,8 +38,8 @@ struct socket {
|
||||
|
||||
std::vector<network::packet_p> packets; ///< Packets that are prepared with their fd
|
||||
|
||||
std::vector<network::packet_p> listen_packets; ///< The packets that wait to be read in listen mode
|
||||
condition_variable listen_queue; ///< Condition variable to wait for packets
|
||||
std::queue<network::packet_p> listen_packets; ///< The packets that wait to be read in listen mode
|
||||
condition_variable listen_queue; ///< Condition variable to wait for packets
|
||||
|
||||
socket() {}
|
||||
socket(size_t id, socket_domain domain, socket_type type, socket_protocol protocol, size_t next_fd, bool listen)
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include <types.hpp>
|
||||
#include <atomic.hpp>
|
||||
#include <circular_buffer.hpp>
|
||||
#include <queue.hpp>
|
||||
|
||||
#include "conc/condition_variable.hpp"
|
||||
|
||||
@ -37,7 +37,7 @@ struct tcp_connection {
|
||||
|
||||
std::atomic<bool> listening; ///< Indicates if a kernel thread is listening on this connection
|
||||
condition_variable queue; ///< The listening queue
|
||||
std::vector<network::packet_p> packets; ///< The packets for the listening queue
|
||||
std::queue<network::packet_p> packets; ///< The packets for the listening queue
|
||||
|
||||
bool connected = false; ///< Indicate if the connection is connnected
|
||||
bool server = false; ///< Indicate if the connection is a server (true) or a client (false)
|
||||
|
@ -879,8 +879,8 @@ std::expected<size_t> network::wait_for_packet(char* buffer, socket_fd_t socket_
|
||||
socket.listen_queue.wait();
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
std::copy_n(packet->payload, packet->payload_size, buffer);
|
||||
|
||||
@ -912,8 +912,8 @@ std::expected<size_t> network::wait_for_packet(char* buffer, socket_fd_t socket_
|
||||
}
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
std::copy_n(packet->payload, packet->payload_size, buffer);
|
||||
|
||||
@ -940,7 +940,7 @@ void network::propagate_packet(const packet_p& packet, socket_protocol protocol)
|
||||
// Note: Stream and datagram sockets are responsible for propagation
|
||||
|
||||
if (propagate) {
|
||||
socket.listen_packets.push_back(packet);
|
||||
socket.listen_packets.push(packet);
|
||||
socket.listen_queue.notify_one();
|
||||
}
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ void network::tcp::layer::decode(network::interface_descriptor& interface, netwo
|
||||
if (connection.listening.load()) {
|
||||
logging::logf(logging::log_level::TRACE, "tcp:decode: Propagated to connection\n");
|
||||
|
||||
connection.packets.push_back(packet);
|
||||
connection.packets.push(packet);
|
||||
connection.queue.notify_one();
|
||||
}
|
||||
|
||||
@ -187,7 +187,7 @@ void network::tcp::layer::decode(network::interface_descriptor& interface, netwo
|
||||
if (socket.listen) {
|
||||
logging::logf(logging::log_level::TRACE, "tcp:decode: Propagated to socket\n");
|
||||
|
||||
socket.listen_packets.push_back(packet);
|
||||
socket.listen_packets.push(packet);
|
||||
socket.listen_queue.notify_one();
|
||||
}
|
||||
}
|
||||
@ -264,8 +264,8 @@ std::expected<size_t> network::tcp::layer::receive(char* buffer, network::socket
|
||||
socket.listen_queue.wait();
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
logging::logf(logging::log_level::TRACE, "tcp:receive: Received packet\n");
|
||||
|
||||
@ -302,8 +302,8 @@ std::expected<size_t> network::tcp::layer::receive(char* buffer, network::socket
|
||||
}
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
logging::logf(logging::log_level::TRACE, "tcp:receive: Received packet\n");
|
||||
|
||||
@ -403,8 +403,8 @@ std::expected<void> network::tcp::layer::finalize_packet(network::interface_desc
|
||||
|
||||
thor_assert(!connection.packets.empty(), "Should not be notified if queue not empty");
|
||||
|
||||
auto received_packet = connection.packets.back();
|
||||
connection.packets.pop_back();
|
||||
auto received_packet = connection.packets.top();
|
||||
connection.packets.pop();
|
||||
|
||||
auto* tcp_header = reinterpret_cast<network::tcp::header*>(received_packet->payload + received_packet->tag(2));
|
||||
auto flags = switch_endian_16(tcp_header->flags);
|
||||
@ -551,8 +551,8 @@ std::expected<size_t> network::tcp::layer::accept(network::socket& socket){
|
||||
connection.queue.wait();
|
||||
}
|
||||
|
||||
auto received_packet = connection.packets.back();
|
||||
connection.packets.pop_back();
|
||||
auto received_packet = connection.packets.top();
|
||||
connection.packets.pop();
|
||||
|
||||
auto* tcp_header = reinterpret_cast<header*>(received_packet->payload + received_packet->index);
|
||||
auto flags = switch_endian_16(tcp_header->flags);
|
||||
@ -722,8 +722,8 @@ std::expected<void> network::tcp::layer::disconnect(network::socket& sock) {
|
||||
auto remaining = timeout_ms - (after - before);
|
||||
|
||||
if(connection.queue.wait_for(remaining)){
|
||||
auto received_packet = connection.packets.back();
|
||||
connection.packets.pop_back();
|
||||
auto received_packet = connection.packets.top();
|
||||
connection.packets.pop();
|
||||
|
||||
auto* tcp_header = reinterpret_cast<header*>(received_packet->payload + received_packet->index);
|
||||
auto flags = switch_endian_16(tcp_header->flags);
|
||||
@ -788,8 +788,8 @@ std::expected<void> network::tcp::layer::disconnect(network::socket& sock) {
|
||||
}
|
||||
}
|
||||
|
||||
auto received_packet = connection.packets.back();
|
||||
connection.packets.pop_back();
|
||||
auto received_packet = connection.packets.top();
|
||||
connection.packets.pop();
|
||||
|
||||
auto* tcp_header = reinterpret_cast<header*>(received_packet->payload + received_packet->index);
|
||||
auto flags = switch_endian_16(tcp_header->flags);
|
||||
|
@ -101,7 +101,7 @@ void network::udp::layer::decode(network::interface_descriptor& interface, netwo
|
||||
auto& socket = *connection.socket;
|
||||
|
||||
if (socket.listen) {
|
||||
socket.listen_packets.push_back(packet);
|
||||
socket.listen_packets.push(packet);
|
||||
socket.listen_queue.notify_one();
|
||||
}
|
||||
}
|
||||
@ -294,8 +294,8 @@ std::expected<size_t> network::udp::layer::receive(char* buffer, network::socket
|
||||
socket.listen_queue.wait();
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
auto* udp_header = reinterpret_cast<network::udp::header*>(packet->payload + packet->tag(2));
|
||||
auto payload_len = switch_endian_16(udp_header->length);
|
||||
@ -327,8 +327,8 @@ std::expected<size_t> network::udp::layer::receive(char* buffer, network::socket
|
||||
}
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
auto* udp_header = reinterpret_cast<network::udp::header*>(packet->payload + packet->tag(2));
|
||||
auto payload_len = switch_endian_16(udp_header->length);
|
||||
@ -356,8 +356,8 @@ std::expected<size_t> network::udp::layer::receive_from(char* buffer, network::s
|
||||
socket.listen_queue.wait();
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
auto* udp_header = reinterpret_cast<network::udp::header*>(packet->payload + packet->tag(2));
|
||||
auto payload_len = switch_endian_16(udp_header->length);
|
||||
@ -396,8 +396,8 @@ std::expected<size_t> network::udp::layer::receive_from(char* buffer, network::s
|
||||
}
|
||||
}
|
||||
|
||||
auto packet = socket.listen_packets.back();
|
||||
socket.listen_packets.pop_back();
|
||||
auto packet = socket.listen_packets.top();
|
||||
socket.listen_packets.pop();
|
||||
|
||||
auto* udp_header = reinterpret_cast<network::udp::header*>(packet->payload + packet->tag(2));
|
||||
auto payload_len = switch_endian_16(udp_header->length);
|
||||
|
Loading…
x
Reference in New Issue
Block a user