Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
threads.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013-2017 celeron55, Perttu Ahola <celeron55@gmail.com>
4// Copyright (C) 2017 celeron55, Loic Blot <loic.blot@unix-experience.fr>
5
6#pragma once
7
8/********************************************/
9/* may only be included from in src/network */
10/********************************************/
11
12#include <cassert>
13#include "threading/thread.h"
15
16namespace con
17{
18
19class Connection;
20
22{
27 bool ack;
28
29 OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer<u8> &data_,
30 bool reliable_,bool ack_=false):
31 peer_id(peer_id_),
32 channelnum(channelnum_),
33 data(data_),
34 reliable(reliable_),
35 ack(ack_)
36 {
37 }
38};
39
41{
42
43public:
44 friend class UDPPeer;
45
46 ConnectionSendThread(unsigned int max_packet_size, float timeout);
47
48 void *run();
49
50 void Trigger();
51
52 void setParent(Connection *parent)
53 {
54 assert(parent != NULL); // Pre-condition
55 m_connection = parent;
56 }
57
58 void setPeerTimeout(float peer_timeout) { m_timeout = peer_timeout; }
59
60private:
61 void runTimeouts(float dtime, u32 peer_packet_quota);
62 void resendReliable(Channel &channel, const BufferedPacket *k, float resend_timeout);
63 void rawSend(const BufferedPacket *p);
64 bool rawSendAsPacket(session_t peer_id, u8 channelnum,
65 const SharedBuffer<u8> &data, bool reliable);
66
69 void serve(Address bind_address);
70 void connect(Address address);
71 void disconnect();
72 void disconnect_peer(session_t peer_id);
73 void fix_peer_id(session_t own_peer_id);
74 void send(session_t peer_id, u8 channelnum, const SharedBuffer<u8> &data);
76 void sendToAll(u8 channelnum, const SharedBuffer<u8> &data);
78
79 void sendPackets(float dtime, u32 peer_packet_quota);
80
81 void sendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer<u8> &data,
82 bool ack = false);
83
85
86 bool packetsQueued();
87
89 unsigned int m_max_packet_size;
90 float m_timeout;
91 std::queue<OutgoingPacket> m_outgoing_queue;
93
96 unsigned int m_max_packets_requeued = 256;
97};
98
100{
101public:
103
104 void *run();
105
106 void setParent(Connection *parent)
107 {
108 assert(parent); // Pre-condition
109 m_connection = parent;
110 }
111
112private:
113 void receive(SharedBuffer<u8> &packetdata, bool &packet_queued);
114
115 // Returns next data from a buffer if possible
116 // If found, returns true; if not, false.
117 // If found, sets peer_id and dst
118 bool getFromBuffers(session_t &peer_id, SharedBuffer<u8> &dst);
119
121 Channel *channel, session_t &peer_id, SharedBuffer<u8> &dst);
122
123 /*
124 Processes a packet with the basic header stripped out.
125 Parameters:
126 packetdata: Data in packet (with no base headers)
127 peer_id: peer id of the sender of the packet in question
128 channelnum: channel on which the packet was sent
129 reliable: true if recursing into a reliable packet
130 */
132 const SharedBuffer<u8> &packetdata, session_t peer_id,
133 u8 channelnum, bool reliable);
134
136 const SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
137 bool reliable);
139 const SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
140 bool reliable);
142 const SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
143 bool reliable);
145 const SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
146 bool reliable);
147
149 {
151 const SharedBuffer<u8> &packet, Peer *peer, u8 channelnum,
152 bool reliable);
153 };
154
156 u64 time = 0;
157 int counter = 0;
158 bool logged = false;
159
160 void tick() {
161 u64 now = porting::getTimeS();
162 if (time != now) {
163 time = now;
164 counter = 0;
165 logged = false;
166 }
167 }
168 };
169
171
173
175};
176}
Definition address.h:27
Definition semaphore.h:18
Definition pointer.h:132
Definition thread.h:57
Definition internal.h:382
Definition threads.h:100
SharedBuffer< u8 > handlePacketType_Reliable(Channel *channel, const SharedBuffer< u8 > &packetdata, Peer *peer, u8 channelnum, bool reliable)
Definition threads.cpp:1320
void receive(SharedBuffer< u8 > &packetdata, bool &packet_queued)
Definition threads.cpp:931
ConnectionReceiveThread()
Definition threads.cpp:829
void * run()
Definition threads.cpp:834
SharedBuffer< u8 > handlePacketType_Original(Channel *channel, const SharedBuffer< u8 > &packetdata, Peer *peer, u8 channelnum, bool reliable)
Definition threads.cpp:1282
bool getFromBuffers(session_t &peer_id, SharedBuffer< u8 > &dst)
Definition threads.cpp:1086
SharedBuffer< u8 > processPacket(Channel *channel, const SharedBuffer< u8 > &packetdata, session_t peer_id, u8 channelnum, bool reliable)
Definition threads.cpp:1142
SharedBuffer< u8 > handlePacketType_Split(Channel *channel, const SharedBuffer< u8 > &packetdata, Peer *peer, u8 channelnum, bool reliable)
Definition threads.cpp:1296
SharedBuffer< u8 > handlePacketType_Control(Channel *channel, const SharedBuffer< u8 > &packetdata, Peer *peer, u8 channelnum, bool reliable)
Definition threads.cpp:1181
Connection * m_connection
Definition threads.h:172
static const PacketTypeHandler packetTypeRouter[PACKET_TYPE_MAX]
Definition threads.h:170
bool checkIncomingBuffers(Channel *channel, session_t &peer_id, SharedBuffer< u8 > &dst)
Definition threads.cpp:1108
RateLimitHelper m_new_peer_ratelimit
Definition threads.h:174
void setParent(Connection *parent)
Definition threads.h:106
Definition threads.h:41
unsigned int m_max_data_packets_per_iteration
Definition threads.h:95
Semaphore m_send_sleep_semaphore
Definition threads.h:92
void send(session_t peer_id, u8 channelnum, const SharedBuffer< u8 > &data)
Definition threads.cpp:609
void * run()
Definition threads.cpp:67
void fix_peer_id(session_t own_peer_id)
Definition threads.cpp:589
void processReliableCommand(ConnectionCommandPtr &c)
Definition threads.cpp:390
std::queue< OutgoingPacket > m_outgoing_queue
Definition threads.h:91
unsigned int m_iteration_packets_avaialble
Definition threads.h:94
void disconnect_peer(session_t peer_id)
Definition threads.cpp:567
void connect(Address address)
Definition threads.cpp:524
void processNonReliableCommand(ConnectionCommandPtr &c)
Definition threads.cpp:450
void setParent(Connection *parent)
Definition threads.h:52
void sendToAll(u8 channelnum, const SharedBuffer< u8 > &data)
Definition threads.cpp:650
float m_timeout
Definition threads.h:90
void serve(Address bind_address)
Definition threads.cpp:510
void disconnect()
Definition threads.cpp:549
void setPeerTimeout(float peer_timeout)
Definition threads.h:58
bool packetsQueued()
Definition threads.cpp:139
void sendToAllReliable(ConnectionCommandPtr &c)
Definition threads.cpp:659
ConnectionSendThread(unsigned int max_packet_size, float timeout)
Definition threads.cpp:49
unsigned int m_max_packets_requeued
Definition threads.h:96
void sendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer< u8 > &data, bool ack=false)
Definition threads.cpp:822
void runTimeouts(float dtime, u32 peer_packet_quota)
Definition threads.cpp:166
void Trigger()
Definition threads.cpp:134
bool rawSendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer< u8 > &data, bool reliable)
Definition threads.cpp:336
void sendAsPacketReliable(BufferedPacketPtr &p, Channel *channel)
Definition threads.cpp:316
void rawSend(const BufferedPacket *p)
Definition threads.cpp:301
void sendReliable(ConnectionCommandPtr &c)
Definition threads.cpp:641
void sendPackets(float dtime, u32 peer_packet_quota)
Definition threads.cpp:673
Connection * m_connection
Definition threads.h:88
void resendReliable(Channel &channel, const BufferedPacket *k, float resend_timeout)
Definition threads.cpp:274
unsigned int m_max_packet_size
Definition threads.h:89
Definition impl.h:224
Definition impl.h:96
Definition internal.h:483
Definition client.h:61
@ PACKET_TYPE_MAX
Definition internal.h:118
std::shared_ptr< BufferedPacket > BufferedPacketPtr
Definition impl.h:91
std::shared_ptr< ConnectionCommand > ConnectionCommandPtr
Definition impl.h:88
u64 getTimeS()
Definition porting.h:174
u16 session_t
Definition networkprotocol.h:27
Definition internal.h:195
SharedBuffer< u8 >(ConnectionReceiveThread::* handler)(Channel *channel, const SharedBuffer< u8 > &packet, Peer *peer, u8 channelnum, bool reliable)
Definition threads.h:150
void tick()
Definition threads.h:160
Definition threads.h:22
u8 channelnum
Definition threads.h:24
bool ack
Definition threads.h:27
session_t peer_id
Definition threads.h:23
bool reliable
Definition threads.h:26
SharedBuffer< u8 > data
Definition threads.h:25
OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer< u8 > &data_, bool reliable_, bool ack_=false)
Definition threads.h:29
static std::string p(std::string path)
Definition test_filesys.cpp:64