Fix containers of packets

This commit is contained in:
Baptiste Wicht 2016-10-04 22:07:33 +02:00
parent 0ec1826a63
commit cf8ba31cee
No known key found for this signature in database
GPG Key ID: C5566B6C7F884532
5 changed files with 33 additions and 33 deletions

View File

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

View File

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

View File

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

View File

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

View File

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