forked from irwir/eMule
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Contact.h
120 lines (107 loc) · 4.19 KB
/
Contact.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
Copyright (C)2003 Barry Dunne (http://www.emule-project.net)
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 (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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
This work is based on the java implementation of the Kademlia protocol.
Kademlia: Peer-to-peer routing based on the XOR metric
Copyright (C) 2002 Petar Maymounkov [[email protected]]
http://kademlia.scs.cs.nyu.edu
*/
// Note To Mods //
/*
Please do not change anything here and release it..
There is going to be a new forum created just for the Kademlia side of the client..
If you feel there is an error or a way to improve something, please
post it in the forum first and let us look at it.. If it is a real improvement,
it will be added to the offical client.. Changing something without knowing
what all it does can cause great harm to the network if released in mass form..
Any mod that changes anything within the Kademlia side will not be allowed to advertise
there client on the eMule forum..
*/
#pragma once
#include "../utils/UInt128.h"
#include "../utils/KadUDPKey.h"
namespace Kademlia
{
class CContact
{
friend class CRoutingZone;
friend class CRoutingBin;
public:
~CContact();
CContact();
CContact(const CUInt128 &uClientID, uint32 uIp, uint16 uUdpPort, uint16 uTcpPort, uint8 uVersion, CKadUDPKey cUDPKey, bool bIPVerified);
CContact(const CUInt128 &uClientID, uint32 uIp, uint16 uUdpPort, uint16 uTcpPort, const CUInt128 &uTarget, uint8 uVersion, CKadUDPKey cUDPKey, bool bIPVerified);
CContact& operator=(const CContact& k1) { Copy(k1); return *this; }
void GetClientID(CUInt128 *puId) const;
CUInt128 GetClientID() const;
void GetClientID(CString *puId) const;
void SetClientID(const CUInt128 &uClientID);
void GetDistance(CUInt128 *puDistance) const;
void GetDistance(CString *psDistance) const;
CUInt128 GetDistance() const;
uint32 GetIPAddress() const;
void GetIPAddress(CString *psIp) const;
void SetIPAddress(uint32 uIp);
uint16 GetTCPPort() const;
void GetTCPPort(CString *psPort) const;
void SetTCPPort(uint16 uPort);
uint16 GetUDPPort() const;
void GetUDPPort(CString *psPort) const;
void SetUDPPort(uint16 sPort);
byte GetType() const;
void UpdateType();
void CheckingType();
bool GetGuiRefs() const;
void SetGuiRefs(bool bRefs);
bool InUse();
void IncUse();
void DecUse();
uint8 GetVersion() const;
void SetVersion(uint8 uVersion);
time_t GetCreatedTime() const;
time_t GetExpireTime() const;
time_t GetLastTypeSet() const;
time_t GetLastSeen() const;
bool GetReceivedHelloPacket() const {return m_bReceivedHelloPacket;}
void SetReceivedHelloPacket() {m_bReceivedHelloPacket = true;}
CKadUDPKey GetUDPKey() const;
void SetUDPKey(CKadUDPKey cUDPKey);
bool IsIpVerified() const;
void SetIpVerified(bool bIPVerified);
// bootstrapcontact functions only used for GUI
bool IsBootstrapContact() const {return m_bBootstrapContact;}
void SetBootstrapContact() {m_bBootstrapContact = true;}
bool IsBootstrapFailed() const {return m_bBootstrapFailed;}
void SetBootstrapFailed() {m_bBootstrapFailed = true;}
private:
void InitContact(); // Common var initialization goes here
void Copy(const CContact& fromContact);
CUInt128 m_uClientID;
CUInt128 m_uDistance;
uint32 m_uIp;
uint16 m_uTcpPort;
uint16 m_uUdpPort;
uint32 m_uInUse;
time_t m_tLastTypeSet;
time_t m_tExpires;
time_t m_tCreated;
byte m_byType;
uint8 m_uVersion;
bool m_bGuiRefs;
bool m_bIPVerified;
bool m_bReceivedHelloPacket;
bool m_bBootstrapContact;
bool m_bBootstrapFailed;
CKadUDPKey m_cUDPKey;
};
}