]> git.lizzy.rs Git - minetest.git/blobdiff - src/connection.h
Don't use msvc libs for mingw build
[minetest.git] / src / connection.h
index 51a98ed92ce7c2bd9a568f0cd21bbea5c286209a..a1d564849810b1afc1d995ed858c56d2cf03db72 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -20,14 +20,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef CONNECTION_HEADER
 #define CONNECTION_HEADER
 
-#include <iostream>
-#include <fstream>
-#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 <iostream>
+#include <fstream>
+#include <list>
+#include <map>
 
 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<u8> makeOriginalPacket(
                SharedBuffer<u8> data);
 
 // Split data in chunks and add TYPE_SPLIT headers to them
-core::list<SharedBuffer<u8> > makeSplitPacket(
+std::list<SharedBuffer<u8> > makeSplitPacket(
                SharedBuffer<u8> 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<SharedBuffer<u8> > makeAutoSplitPacket(
+std::list<SharedBuffer<u8> > makeAutoSplitPacket(
                SharedBuffer<u8> 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<u16, SharedBuffer<u8> > chunks;
+       std::map<u16, SharedBuffer<u8> > chunks;
        u32 chunk_count;
        float time; // Seconds from adding
        bool reliable; // If true, isn't deleted on timeout
@@ -197,15 +191,14 @@ TODO: Should we have a receiver_peer_id also?
        [6] u8 channel
 sender_peer_id:
        Unique to each peer.
-       value 0 is reserved for making new connections
-       value 1 is reserved for server
+       value 0 (PEER_ID_INEXISTENT) is reserved for making new connections
+       value 1 (PEER_ID_SERVER) is reserved for server
+       these constants are defined in constants.h
 channel:
        The lower the number, the higher the priority is.
        Only channels 0, 1 and 2 exist.
 */
 #define BASE_HEADER_SIZE 7
-#define PEER_ID_INEXISTENT 0
-#define PEER_ID_SERVER 1
 #define CHANNEL_COUNT 3
 /*
 Packet types:
@@ -276,28 +269,29 @@ with a buffer in the receiving and transmitting end.
        for fast access to the smallest one.
 */
 
-typedef core::list<BufferedPacket>::Iterator RPBSearchResult;
+typedef std::list<BufferedPacket>::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<BufferedPacket> getTimedOuts(float timeout);
+       std::list<BufferedPacket> getTimedOuts(float timeout);
 
 private:
-       core::list<BufferedPacket> m_list;
+       std::list<BufferedPacket> m_list;
+       u16 m_list_size;
 };
 
 /*
@@ -318,7 +312,7 @@ class IncomingSplitBuffer
        
 private:
        // Key is seqnum
-       core::map<u16, IncomingSplitPacket*> m_buf;
+       std::map<u16, IncomingSplitPacket*> m_buf;
 };
 
 class Connection;
@@ -402,7 +396,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 +547,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 +591,7 @@ class Connection: public SimpleThread
        void rawSend(const BufferedPacket &packet);
        Peer* getPeer(u16 peer_id);
        Peer* getPeerNoEx(u16 peer_id);
-       core::list<Peer*> getPeers();
+       std::list<Peer*> getPeers();
        bool getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst);
        // Returns next data from a buffer if possible
        // If found, returns true; if not, false.
@@ -623,7 +621,7 @@ class Connection: public SimpleThread
        UDPSocket m_socket;
        u16 m_peer_id;
        
-       core::map<u16, Peer*> m_peers;
+       std::map<u16, Peer*> m_peers;
        JMutex m_peers_mutex;
 
        // Backwards compatibility