X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2Fconnection.h;h=e68557ccde68918d8f8cb1c1b3e11653b85eb925;hb=6228d634fb31d1ce925d1fdc2dac022629a007ef;hp=b793f580f90d4c73687d6b720c4a183f68b6e5b7;hpb=618314985d6a632ccfd2001d969d32a5ee6e4ca1;p=dragonfireclient.git diff --git a/src/connection.h b/src/connection.h index b793f580f..e68557ccd 100644 --- a/src/connection.h +++ b/src/connection.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ @@ -20,14 +20,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef CONNECTION_HEADER #define CONNECTION_HEADER -#include -#include -#include "debug.h" -#include "common_irrlicht.h" +#include "irrlichttypes_bloated.h" #include "socket.h" -#include "utility.h" #include "exceptions.h" #include "constants.h" +#include "util/pointer.h" +#include "util/container.h" +#include "util/thread.h" +#include +#include +#include +#include namespace con { @@ -107,15 +110,6 @@ class ProcessedSilentlyException : public BaseException {} }; -inline u16 readPeerId(u8 *packetdata) -{ - return readU16(&packetdata[4]); -} -inline u8 readChannel(u8 *packetdata) -{ - return readU8(&packetdata[6]); -} - #define SEQNUM_MAX 65535 inline bool seqnum_higher(u16 higher, u16 lower) { @@ -150,14 +144,14 @@ SharedBuffer makeOriginalPacket( SharedBuffer data); // Split data in chunks and add TYPE_SPLIT headers to them -core::list > makeSplitPacket( +std::list > makeSplitPacket( SharedBuffer data, u32 chunksize_max, u16 seqnum); // Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet // Increments split_seqnum if a split packet is made -core::list > makeAutoSplitPacket( +std::list > makeAutoSplitPacket( SharedBuffer data, u32 chunksize_max, u16 &split_seqnum); @@ -175,7 +169,7 @@ struct IncomingSplitPacket reliable = false; } // Key is chunk number, value is data without headers - core::map > chunks; + std::map > chunks; u32 chunk_count; float time; // Seconds from adding bool reliable; // If true, isn't deleted on timeout @@ -276,28 +270,29 @@ with a buffer in the receiving and transmitting end. for fast access to the smallest one. */ -typedef core::list::Iterator RPBSearchResult; +typedef std::list::iterator RPBSearchResult; class ReliablePacketBuffer { public: - + ReliablePacketBuffer(); void print(); bool empty(); u32 size(); RPBSearchResult findPacket(u16 seqnum); RPBSearchResult notFound(); - u16 getFirstSeqnum(); + bool getFirstSeqnum(u16 *result); BufferedPacket popFirst(); BufferedPacket popSeqnum(u16 seqnum); void insert(BufferedPacket &p); void incrementTimeouts(float dtime); void resetTimedOuts(float timeout); bool anyTotaltimeReached(float timeout); - core::list getTimedOuts(float timeout); + std::list getTimedOuts(float timeout); private: - core::list m_list; + std::list m_list; + u16 m_list_size; }; /* @@ -318,7 +313,7 @@ class IncomingSplitBuffer private: // Key is seqnum - core::map m_buf; + std::map m_buf; }; class Connection; @@ -402,7 +397,11 @@ class Peer float m_max_packets_per_second; int m_num_sent; int m_max_num_sent; - + + // Updated from configuration by Connection + float congestion_control_aim_rtt; + float congestion_control_max_rate; + float congestion_control_min_rate; private: }; @@ -549,8 +548,8 @@ struct ConnectionCommand class Connection: public SimpleThread { public: - Connection(u32 protocol_id, u32 max_packet_size, float timeout); - Connection(u32 protocol_id, u32 max_packet_size, float timeout, + Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6); + Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, PeerHandler *peerhandler); ~Connection(); void * Thread(); @@ -593,7 +592,7 @@ class Connection: public SimpleThread void rawSend(const BufferedPacket &packet); Peer* getPeer(u16 peer_id); Peer* getPeerNoEx(u16 peer_id); - core::list getPeers(); + std::list getPeers(); bool getFromBuffers(u16 &peer_id, SharedBuffer &dst); // Returns next data from a buffer if possible // If found, returns true; if not, false. @@ -623,7 +622,7 @@ class Connection: public SimpleThread UDPSocket m_socket; u16 m_peer_id; - core::map m_peers; + std::map m_peers; JMutex m_peers_mutex; // Backwards compatibility