X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fconnection.h;h=516702cb8e19daa5639b0db0749bfcc711df0117;hb=55c646c5c2b40931d24be8541b3056ab3322a70f;hp=c9474032d1836a1be63b8d144a50f0e774d91e3f;hpb=e258675eabc874d31bc9c6cf49e4bbc1f7f3f417;p=oweals%2Fminetest.git diff --git a/src/connection.h b/src/connection.h index c9474032d..516702cb8 100644 --- a/src/connection.h +++ b/src/connection.h @@ -120,9 +120,9 @@ public: }; typedef enum MTProtocols { - PRIMARY, - UDP, - MINETEST_RELIABLE_UDP + MTP_PRIMARY, + MTP_UDP, + MTP_MINETEST_RELIABLE_UDP } MTProtocols; #define SEQNUM_MAX 65535 @@ -162,16 +162,19 @@ inline bool seqnum_in_window(u16 seqnum, u16 next,u16 window_size) struct BufferedPacket { BufferedPacket(u8 *a_data, u32 a_size): - data(a_data, a_size), time(0.0), totaltime(0.0), absolute_send_time(-1) + data(a_data, a_size), time(0.0), totaltime(0.0), absolute_send_time(-1), + resend_count(0) {} BufferedPacket(u32 a_size): - data(a_size), time(0.0), totaltime(0.0), absolute_send_time(-1) + data(a_size), time(0.0), totaltime(0.0), absolute_send_time(-1), + resend_count(0) {} SharedBuffer data; // Data of the packet, including headers float time; // Seconds from buffering the packet or re-sending float totaltime; // Seconds from buffering the packet unsigned int absolute_send_time; Address address; // Sender or destination + unsigned int resend_count; }; // This adds the base headers to the data and makes a packet out of it @@ -339,13 +342,11 @@ private: RPBSearchResult findPacket(u16 seqnum); std::list m_list; - u16 m_list_size; + u32 m_list_size; u16 m_oldest_non_answered_ack; JMutex m_list_mutex; - - unsigned int writeptr; }; /* @@ -406,7 +407,6 @@ enum ConnectionCommandType{ struct ConnectionCommand { enum ConnectionCommandType type; - u16 port; Address address; u16 peer_id; u8 channelnum; @@ -416,10 +416,10 @@ struct ConnectionCommand ConnectionCommand(): type(CONNCMD_NONE), peer_id(PEER_ID_INEXISTENT), reliable(false), raw(false) {} - void serve(u16 port_) + void serve(Address address_) { type = CONNCMD_SERVE; - port = port_; + address = address_; } void connect(Address address_) { @@ -518,8 +518,9 @@ public: void UpdatePacketTooLateCounter(); void UpdateBytesSent(unsigned int bytes,unsigned int packages=1); void UpdateBytesLost(unsigned int bytes); + void UpdateBytesReceived(unsigned int bytes); - void UpdateTimers(float dtime); + void UpdateTimers(float dtime, bool legacy_peer); const float getCurrentDownloadRateKB() { JMutexAutoLock lock(m_internal_mutex); return cur_kbps; }; @@ -531,17 +532,24 @@ public: const float getMaxLossRateKB() { JMutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; + const float getCurrentIncomingRateKB() + { JMutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; + const float getMaxIncomingRateKB() + { JMutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; + const float getAvgDownloadRateKB() { JMutexAutoLock lock(m_internal_mutex); return avg_kbps; }; const float getAvgLossRateKB() { JMutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; + const float getAvgIncomingRateKB() + { JMutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; const unsigned int getWindowSize() const { return window_size; }; void setWindowSize(unsigned int size) { window_size = size; }; private: JMutex m_internal_mutex; - unsigned int window_size; + int window_size; u16 next_incoming_seqnum; @@ -554,14 +562,20 @@ private: float packet_loss_counter; unsigned int current_bytes_transfered; + unsigned int current_bytes_received; unsigned int current_bytes_lost; float max_kbps; float cur_kbps; float avg_kbps; + float max_incoming_kbps; + float cur_incoming_kbps; + float avg_incoming_kbps; float max_kbps_lost; float cur_kbps_lost; float avg_kbps_lost; float bpm_counter; + + unsigned int rate_samples; }; class Peer; @@ -620,7 +634,7 @@ private: class Connection; -typedef enum rtt_stat_type { +typedef enum { MIN_RTT, MAX_RTT, AVG_RTT, @@ -629,6 +643,15 @@ typedef enum rtt_stat_type { AVG_JITTER } rtt_stat_type; +typedef enum { + CUR_DL_RATE, + AVG_DL_RATE, + CUR_INC_RATE, + AVG_INC_RATE, + CUR_LOSS_RATE, + AVG_LOSS_RATE, +} rate_stat_type; + class Peer { public: friend class PeerHelper; @@ -768,6 +791,7 @@ public: friend class PeerHelper; friend class ConnectionReceiveThread; friend class ConnectionSendThread; + friend class Connection; UDPPeer(u16 a_id, Address a_address, Connection* connection); virtual ~UDPPeer() {}; @@ -912,7 +936,7 @@ private: void processReliableCommand (ConnectionCommand &c); void processNonReliableCommand (ConnectionCommand &c); - void serve (u16 port); + void serve (Address bind_address); void connect (Address address); void disconnect (); void disconnect_peer(u16 peer_id); @@ -976,7 +1000,6 @@ private: Connection* m_connection; - unsigned int m_max_packet_size; }; class Connection @@ -996,7 +1019,7 @@ public: void putCommand(ConnectionCommand &c); void SetTimeoutMs(int timeout){ m_bc_receive_timeout = timeout; } - void Serve(unsigned short port); + void Serve(Address bind_addr); void Connect(Address address); bool Connected(); void Disconnect(); @@ -1005,7 +1028,8 @@ public: void Send(u16 peer_id, u8 channelnum, SharedBuffer data, bool reliable); u16 GetPeerID(){ return m_peer_id; } Address GetPeerAddress(u16 peer_id); - float GetPeerAvgRTT(u16 peer_id); + float getPeerStat(u16 peer_id, rtt_stat_type type); + float getLocalStat(rate_stat_type type); const u32 GetProtocolID() const { return m_protocol_id; }; const std::string getDesc(); void DisconnectPeer(u16 peer_id);