forked from circlecloud/tera
@@ -20,16 +20,16 @@ global.STR_TYPE = 2;
|
||||
global.MAX_STR_BUF_DATA = 200;
|
||||
global.MAX_CONNECTION_ACTIVE = 40;
|
||||
var MAX_CONNECTION_ANOTHER = 40;
|
||||
const TRAFIC_LIMIT_NODE_1S = MAX_BLOCK_SIZE * 1.25;
|
||||
const TRAFIC_LIMIT_NODE_1S = global.MAX_BLOCK_SIZE * 1.25;
|
||||
const TRAFIC_LIMIT_1S = 8 * TRAFIC_LIMIT_NODE_1S;
|
||||
global.STAT_PERIOD = CONSENSUS_PERIOD_TIME / 5;
|
||||
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * STAT_PERIOD / 1000;
|
||||
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * STAT_PERIOD / 1000;
|
||||
global.STAT_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
|
||||
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * global.STAT_PERIOD / 1000;
|
||||
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * global.STAT_PERIOD / 1000;
|
||||
const BUF_PACKET_SIZE = 32 * 1024;
|
||||
global.FORMAT_POW_TO_CLIENT = "{addrArr:hash,HashRND:hash,MIN_POWER_POW_HANDSHAKE:uint,PubKeyType:byte,Sign:arr64,Reserve:arr33}";
|
||||
global.FORMAT_POW_TO_SERVER = "{\
|
||||
DEF_NETWORK:str15,\
|
||||
DEF_VERSION:str9,\
|
||||
global.DEF_VERSION:str9,\
|
||||
DEF_CLIENT:str16, \
|
||||
addrArr:addres, \
|
||||
ToIP:str26,\
|
||||
@@ -57,8 +57,31 @@ const FORMAT_PACKET_SEND_TCP = "{\
|
||||
Hash:hash,\
|
||||
Data:data,\
|
||||
}";
|
||||
let RBTree = global.RBTree;
|
||||
let STreeBuffer = global.STreeBuffer;
|
||||
module.exports = class CTransport extends require("./connect")
|
||||
{
|
||||
UseRNDHeader
|
||||
BAN_IP
|
||||
ip
|
||||
port
|
||||
CanSend
|
||||
SendFormatMap
|
||||
ActualNodes
|
||||
SendTrafficFree
|
||||
LoadedPacketNum
|
||||
LoadedSocketNum
|
||||
LoadBufSocketList
|
||||
BusyLevel
|
||||
LastTimeHard
|
||||
LastTimeHardOK
|
||||
HardPacketForSend
|
||||
MethodTiming
|
||||
CurrentTimeStart
|
||||
CurrentTimeValues
|
||||
SendStatNum
|
||||
Server
|
||||
ServerSign
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.UseRNDHeader = UseRNDHeader
|
||||
@@ -107,10 +130,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 }
|
||||
Map["GETMESSAGE"] = { Period: 1000, Hard: 1 }
|
||||
Map["MESSAGE"] = { Period: 1000, Hard: 1 }
|
||||
Map["TRANSACTION"] = { Period: PERIOD_GET_BLOCK, Hard: 1 }
|
||||
Map["GETBLOCKHEADER"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCKHEADER100"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCK"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["TRANSACTION"] = { Period: global.PERIOD_GET_BLOCK, Hard: 1 }
|
||||
Map["GETBLOCKHEADER"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCKHEADER100"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCK"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 }
|
||||
Map["RETGETNODES"] = { Period: 0, IsAddrList: 1 }
|
||||
Map["RETGETNODES2"] = { Period: 0, IsAddrList: 1 }
|
||||
@@ -152,7 +175,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
Info.Data = global.BufLib.GetBufferFromObject(Info.Data, format.struct, Length, format.wrk)
|
||||
this.Send(Node, Info, 1)
|
||||
}
|
||||
DataFromF(Info, bSendFormat) {
|
||||
DataFromF(Info, bSendFormat?) {
|
||||
var format = this.GetF(Info.Method, bSendFormat);
|
||||
try {
|
||||
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, format.struct, format.wrk);
|
||||
@@ -164,7 +187,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
ADD_CURRENT_STAT_TIME(Key, Value) {
|
||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
||||
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||
if (this.CurrentTimeStart !== TimeNum)
|
||||
this.CurrentTimeValues = {}
|
||||
this.CurrentTimeStart = TimeNum
|
||||
@@ -173,7 +196,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.CurrentTimeValues[Key] += Value
|
||||
}
|
||||
GET_CURRENT_STAT_TIME(Key) {
|
||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
||||
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||
if (this.CurrentTimeStart === TimeNum) {
|
||||
var Value = this.CurrentTimeValues[Key];
|
||||
if (Value === undefined)
|
||||
@@ -186,11 +209,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
RecalcSendStatictic() {
|
||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
||||
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||
if (this.SendStatNum === TimeNum)
|
||||
return;
|
||||
this.SendStatNum = TimeNum
|
||||
var Period = CONSENSUS_PERIOD_TIME / STAT_PERIOD;
|
||||
var Period = global.CONSENSUS_PERIOD_TIME / global.STAT_PERIOD;
|
||||
this.SendTrafficFree = TRAFIC_LIMIT_SEND
|
||||
var it = this.ActualNodes.iterator(), Node;
|
||||
while ((Node = it.next()) !== null) {
|
||||
@@ -212,17 +235,17 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.SendTrafficFree -= Node.SendTrafficLimit
|
||||
}
|
||||
Node.SendTrafficCurrent = 0
|
||||
global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / STAT_PERIOD * Node.SendTrafficLimit / 1024, 1)
|
||||
global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / global.STAT_PERIOD * Node.SendTrafficLimit / 1024, 1)
|
||||
}
|
||||
this.SendTrafficFree += TRAFIC_LIMIT_NODE
|
||||
global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024)
|
||||
}
|
||||
OnGetMethod(Info, CurTime) {
|
||||
if (DEBUG_MODE) {
|
||||
if (global.DEBUG_MODE) {
|
||||
var Str = "";
|
||||
if (Info.Data && Info.Data.Length)
|
||||
Str = " LENGTH=" + Info.Data.Length
|
||||
TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node))
|
||||
global.TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node))
|
||||
}
|
||||
if (global.ADDRLIST_MODE) {
|
||||
var StrOK = ",HAND,GETNODES,";
|
||||
@@ -239,7 +262,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
F.bind(this)(Info, CurTime)
|
||||
}
|
||||
else {
|
||||
TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node)
|
||||
global.TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node)
|
||||
this.AddCheckErrCount(Info.Node, 1, "Method not found")
|
||||
}
|
||||
}
|
||||
@@ -277,7 +300,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
var Key = "" + rinfo.address.trim();
|
||||
var Stat = this.BAN_IP[Key];
|
||||
if (Stat) {
|
||||
if (Stat.TimeTo > (GetCurrentTime(0) - 0))
|
||||
if (Stat.TimeTo > (global.GetCurrentTime(0) - 0))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -306,17 +329,17 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (Node.DeltaBan > 1000000)
|
||||
Node.DeltaBan = 1000000
|
||||
Node.DeltaBan = Node.DeltaBan * 2
|
||||
var TimeTo = (GetCurrentTime(0) - 0) + Node.DeltaBan * 1000;
|
||||
var TimeTo = (global.GetCurrentTime(0) - 0) + Node.DeltaBan * 1000;
|
||||
this.BAN_IP[Key] = { TimeTo: TimeTo }
|
||||
Node.BlockProcessCount = 0
|
||||
this.DeleteNodeFromActiveByIP(Node.ip)
|
||||
global.ADD_TO_STAT("AddToBan")
|
||||
}
|
||||
AddToBanIP(ip, Str, Period) {
|
||||
AddToBanIP(ip, Str, Period?) {
|
||||
if (!Period)
|
||||
Period = 600 * 1000
|
||||
var Key = "" + ip.trim();
|
||||
this.BAN_IP[Key] = { TimeTo: (GetCurrentTime(0) - 0) + Period }
|
||||
this.BAN_IP[Key] = { TimeTo: (global.GetCurrentTime(0) - 0) + Period }
|
||||
this.DeleteNodeFromActiveByIP(ip)
|
||||
global.ToLog("ADD TO BAN:: " + Key + " " + Str)
|
||||
global.ADD_TO_STAT("AddToBanIP")
|
||||
@@ -333,29 +356,29 @@ module.exports = class CTransport extends require("./connect")
|
||||
else {
|
||||
this.OnGetMethod(Meta, CurTime)
|
||||
}
|
||||
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
|
||||
ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime)
|
||||
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime)
|
||||
global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
|
||||
global.ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime)
|
||||
global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime)
|
||||
}
|
||||
GetBufFromData(Method, Data, TypeData, ContextID) {
|
||||
GetBufFromData(Method, Data, TypeData, ContextID?) {
|
||||
var BufData;
|
||||
if (TypeData === BUF_TYPE) {
|
||||
if (TypeData === global.BUF_TYPE) {
|
||||
BufData = Data
|
||||
}
|
||||
else
|
||||
if (TypeData === STR_TYPE) {
|
||||
BufData = Buffer.from(Data.substr(0, MAX_STR_BUF_DATA))
|
||||
if (TypeData === global.STR_TYPE) {
|
||||
BufData = Buffer.from(Data.substr(0, global.MAX_STR_BUF_DATA))
|
||||
}
|
||||
else {
|
||||
if (Data === undefined) {
|
||||
TypeData = BUF_TYPE
|
||||
TypeData = global.BUF_TYPE
|
||||
BufData = Buffer.alloc(0)
|
||||
}
|
||||
else {
|
||||
throw "ERROR TYPE DATA";
|
||||
}
|
||||
}
|
||||
var BUF = {};
|
||||
var BUF: any = {};
|
||||
BUF.PacketSize = 0
|
||||
BUF.NumXORRND = 0
|
||||
BUF.Method = Method
|
||||
@@ -375,7 +398,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
var Meta = global.BufLib.GetObjectFromBuffer(buf, FORMAT_PACKET_SEND_TCP, WorkStructPacketSend);
|
||||
}
|
||||
catch (e) {
|
||||
TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
||||
global.TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
||||
return undefined;
|
||||
}
|
||||
var Hash = this.GetHashFromData(Meta);
|
||||
@@ -384,8 +407,8 @@ module.exports = class CTransport extends require("./connect")
|
||||
global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2)
|
||||
return undefined;
|
||||
}
|
||||
if (Meta.TypeData === STR_TYPE) {
|
||||
Meta.Data = Meta.Data.slice(0, MAX_STR_BUF_DATA).toString()
|
||||
if (Meta.TypeData === global.STR_TYPE) {
|
||||
Meta.Data = Meta.Data.slice(0, global.MAX_STR_BUF_DATA).toString()
|
||||
}
|
||||
return Meta;
|
||||
}
|
||||
@@ -422,7 +445,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
global.ADD_TO_STAT("MAX:BUFFE_LOAD_SIZE", Socket.Buf.length / 1024)
|
||||
Socket.Buf.len = 0
|
||||
var PacketSize = global.BufLib.Read(Socket.Buf, "uint");
|
||||
if (PacketSize > MAX_PACKET_LENGTH) {
|
||||
if (PacketSize > global.MAX_PACKET_LENGTH) {
|
||||
this.SendCloseSocket(Socket, "MAX_PACKET_LENGTH")
|
||||
break;
|
||||
}
|
||||
@@ -464,7 +487,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (this.StopDoSendPacket(Param, Node, Buf.Method)) {
|
||||
return 1;
|
||||
}
|
||||
if (!IsZeroArr(Buf.ContextID)) {
|
||||
if (!global.IsZeroArr(Buf.ContextID)) {
|
||||
Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID)
|
||||
}
|
||||
if (!Buf.Context) {
|
||||
@@ -494,11 +517,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.OnPacketTCP(Buf)
|
||||
}
|
||||
}
|
||||
ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
||||
global.ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
||||
return 1;
|
||||
}
|
||||
StopDoSendPacket(Param, Node, Name) {
|
||||
var CurTime = GetCurrentTime(0) - 0;
|
||||
var CurTime = global.GetCurrentTime(0) - 0;
|
||||
if (!Param) {
|
||||
global.ADD_TO_STAT("STOP_METHOD")
|
||||
global.ADD_TO_STAT("STOP_METHOD:NO")
|
||||
@@ -589,7 +612,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
global.ADD_TO_STAT("DO_HARD_PACKET")
|
||||
global.ADD_TO_STAT("DO_HARD_PACKET:" + Info.Method)
|
||||
var DeltaTime = Date.now() - Info.TimeLoad;
|
||||
if (this.HardPacketForSend.size && DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
||||
if (this.HardPacketForSend.size && DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||
global.ADD_TO_STAT("DELETE_HARD_PACKET_OLD", this.HardPacketForSend.size)
|
||||
this.HardPacketForSend.clear()
|
||||
return;
|
||||
@@ -597,9 +620,9 @@ module.exports = class CTransport extends require("./connect")
|
||||
var MaxCount = 20;
|
||||
while (Info = this.HardPacketForSend.max()) {
|
||||
var DeltaTime = Date.now() - Info.TimeLoad;
|
||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) {
|
||||
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) {
|
||||
this.HardPacketForSend.remove(Info)
|
||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
||||
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||
this.RiseBusyLevelByInfo(Info)
|
||||
Info.Node.NextPing = 1 * 1000
|
||||
this.AddCheckErrCount(Info.Node, 0.2)
|
||||
@@ -645,10 +668,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
DoSendPacketNode(Node) {
|
||||
var TimeNum = Date.now();
|
||||
var Info = Node.SendPacket.max();
|
||||
if (Info && TimeNum - Info.TimeNum > PACKET_ALIVE_PERIOD)
|
||||
if (Info && TimeNum - Info.TimeNum > global.PACKET_ALIVE_PERIOD)
|
||||
while (Info = Node.SendPacket.max()) {
|
||||
var DeltaTime = TimeNum - Info.TimeNum;
|
||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
||||
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||
Node.SendPacket.remove(Info)
|
||||
global.ADD_TO_STAT("DELETE_OLD_PACKET")
|
||||
}
|
||||
@@ -678,7 +701,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
global.ADD_TO_STAT("SEND:" + Info.Method)
|
||||
global.ADD_TO_STAT("SEND:(KB)" + Info.Method, BufWrite.length / 1024)
|
||||
global.ADD_TO_STAT("SEND:" + Info.Method + ":" + NodeName(Node), 1, 1)
|
||||
TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length)
|
||||
global.TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length)
|
||||
return 1;
|
||||
}
|
||||
DoSendPacket() {
|
||||
@@ -723,36 +746,36 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
CheckPOWTicketConnect(Socket, data) {
|
||||
try {
|
||||
var Info = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_SERVER, {});
|
||||
var Info = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_SERVER, {});
|
||||
}
|
||||
catch (e) {
|
||||
this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER")
|
||||
return;
|
||||
}
|
||||
if (Info.DEF_NETWORK !== GetNetworkName()) {
|
||||
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + GetNetworkName())
|
||||
if (Info.DEF_NETWORK !== global.GetNetworkName()) {
|
||||
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + global.GetNetworkName())
|
||||
return;
|
||||
}
|
||||
var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true);
|
||||
if (global.CompareArr(Info.addrArr, this.addrArr) === 0) {
|
||||
AddNodeInfo(Node, "SERV: GET SELF")
|
||||
global.AddNodeInfo(Node, "SERV: GET SELF")
|
||||
this.SendCloseSocket(Socket, "SELF")
|
||||
return;
|
||||
}
|
||||
var Hash = shaarr2(this.addrArr, Socket.HashRND);
|
||||
var hashInfo = GetHashWithValues(Hash, Info.nonce, 0);
|
||||
var power = GetPowPower(hashInfo);
|
||||
var Hash = global.shaarr2(this.addrArr, Socket.HashRND);
|
||||
var hashInfo = global.GetHashWithValues(Hash, Info.nonce, 0);
|
||||
var power = global.GetPowPower(hashInfo);
|
||||
if (Info.Reconnect) {
|
||||
if ((Node.SecretForReconnect && Node.WaitConnectFromServer && global.CompareArr(Node.SecretForReconnect, Info.SecretForReconnect) === 0) || Info.Reconnect === 255) {
|
||||
var Result = 1;
|
||||
let Result = 1;
|
||||
if (Info.Reconnect === 255) {
|
||||
Result = CheckDevelopSign(Hash, Info.Sign)
|
||||
Result = global.CheckDevelopSign(Hash, Info.Sign)
|
||||
}
|
||||
if (Result) {
|
||||
Node.NextConnectDelta = 1000
|
||||
Node.WaitConnectFromServer = 0
|
||||
Node.GrayConnect = 0
|
||||
AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket))
|
||||
global.AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket))
|
||||
this.AddNodeToActive(Node)
|
||||
Node.Socket = Socket
|
||||
SetSocketStatus(Socket, 3)
|
||||
@@ -767,39 +790,39 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.AddCheckErrCount(Node, 10, "Error Sign Node")
|
||||
}
|
||||
}
|
||||
AddNodeInfo(Node, "SERV: ERROR_RECONNECT")
|
||||
global.AddNodeInfo(Node, "SERV: ERROR_RECONNECT")
|
||||
Socket.end(this.GetBufFromData("POW_CONNEC11", "ERROR_RECONNECT", 2))
|
||||
CloseSocket(Socket, "ERROR_RECONNECT")
|
||||
global.CloseSocket(Socket, "ERROR_RECONNECT")
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (power < MIN_POWER_POW_HANDSHAKE) {
|
||||
if (power < global.MIN_POWER_POW_HANDSHAKE) {
|
||||
global.ToLog("END: MIN_POWER_POW_HANDSHAKE")
|
||||
AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE")
|
||||
global.AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE")
|
||||
Socket.end(this.GetBufFromData("POW_CONNECT2", "MIN_POWER_POW_HANDSHAKE", 2))
|
||||
CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
||||
global.CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (!Node.BlockProcessCount)
|
||||
Node.BlockProcessCount = 0
|
||||
if (this.ActualNodes.size >= MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
||||
AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
||||
if (this.ActualNodes.size >= global.MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
||||
global.AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
||||
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2))
|
||||
CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
||||
global.CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
||||
return;
|
||||
}
|
||||
var Result = false;
|
||||
let Result = false;
|
||||
if (Info.PubKeyType === 2 || Info.PubKeyType === 3)
|
||||
Result = secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr)))
|
||||
Result = global.secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr)))
|
||||
if (!Result) {
|
||||
AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
||||
global.AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
||||
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_SIGN_CLIENT", 2))
|
||||
CloseSocket(Socket, "ERROR_SIGN_CLIENT")
|
||||
global.CloseSocket(Socket, "ERROR_SIGN_CLIENT")
|
||||
this.AddToBanIP(Socket.remoteAddress, "ERROR_SIGN_CLIENT")
|
||||
return;
|
||||
}
|
||||
AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket))
|
||||
global.AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket))
|
||||
Node.FromIP = Info.FromIP
|
||||
Node.FromPort = Info.FromPort
|
||||
Node.SecretForReconnect = crypto.randomBytes(20)
|
||||
@@ -808,7 +831,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
Node.NextConnectDelta = 1000
|
||||
Node.WaitConnectFromServer = 0
|
||||
Node.GrayConnect = 1
|
||||
AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket))
|
||||
global.AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket))
|
||||
this.AddNodeToActive(Node)
|
||||
Node.Socket = Socket
|
||||
SetSocketStatus(Socket, 3)
|
||||
@@ -831,7 +854,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.Server.close()
|
||||
}
|
||||
StartServer() {
|
||||
if (GrayConnect()) {
|
||||
if (global.GrayConnect()) {
|
||||
this.CanSend++
|
||||
return;
|
||||
}
|
||||
@@ -839,20 +862,20 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.Server = net.createServer(function(sock) {
|
||||
if (SELF.WasBanIP({ address: sock.remoteAddress })) {
|
||||
sock.ConnectID = "new"
|
||||
CloseSocket(sock, "WAS BAN", true)
|
||||
global.CloseSocket(sock, "WAS BAN", true)
|
||||
return;
|
||||
}
|
||||
let SOCKET = sock;
|
||||
socketInit(SOCKET, "c")
|
||||
global.socketInit(SOCKET, "c")
|
||||
SetSocketStatus(SOCKET, 0)
|
||||
AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1)
|
||||
global.AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1)
|
||||
global.ADD_TO_STAT("ClientConnected")
|
||||
SOCKET.HashRND = crypto.randomBytes(32)
|
||||
var Data = {
|
||||
addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType,
|
||||
addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: global.MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType,
|
||||
Sign: SELF.ServerSign, Reserve: []
|
||||
};
|
||||
var BufData = global.BufLib.GetBufferFromObject(Data, FORMAT_POW_TO_CLIENT, 300, {});
|
||||
var BufData = global.BufLib.GetBufferFromObject(Data, global.FORMAT_POW_TO_CLIENT, 300, {});
|
||||
var BufWrite = SELF.GetBufFromData("POW_CONNECT5", BufData, 1);
|
||||
try {
|
||||
SOCKET.write(BufWrite)
|
||||
@@ -873,10 +896,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
SOCKET.ConnectToServer = 0
|
||||
return;
|
||||
}
|
||||
CloseSocket(SOCKET, "=SERVER ON DATA=")
|
||||
global.CloseSocket(SOCKET, "=SERVER ON DATA=")
|
||||
}
|
||||
else {
|
||||
socketRead(SOCKET, data)
|
||||
global.socketRead(SOCKET, data)
|
||||
SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data)
|
||||
}
|
||||
})
|
||||
@@ -885,7 +908,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
var Node = SOCKET.Node;
|
||||
var Status = GetSocketStatus(SOCKET);
|
||||
if (Status)
|
||||
AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||
global.AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||
if (Node && Status === 200) {
|
||||
Node.SwapSockets()
|
||||
SOCKET.WasClose = 1
|
||||
@@ -894,15 +917,15 @@ module.exports = class CTransport extends require("./connect")
|
||||
SOCKET.on('close', function(err) {
|
||||
global.ADD_TO_STAT("ClientClose")
|
||||
if (SOCKET.ConnectID && GetSocketStatus(SOCKET))
|
||||
AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||
global.AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||
if (!SOCKET.WasClose && SOCKET.Node) {
|
||||
CloseSocket(SOCKET, "GET CLOSE")
|
||||
global.CloseSocket(SOCKET, "GET CLOSE")
|
||||
}
|
||||
SetSocketStatus(SOCKET, 0)
|
||||
})
|
||||
SOCKET.on('error', function(err) {
|
||||
global.ADD_TO_STAT("ERRORS")
|
||||
CloseSocket(SOCKET, "ERRORS")
|
||||
global.CloseSocket(SOCKET, "ERRORS")
|
||||
if (SOCKET.Node)
|
||||
SELF.AddCheckErrCount(SOCKET.Node, 1, "ERR##2 : socket")
|
||||
})
|
||||
@@ -911,7 +934,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
})
|
||||
this.Server.on('error', function(err) {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
||||
global.ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
||||
if (SELF.Server)
|
||||
SELF.Server.close()
|
||||
setTimeout(function() {
|
||||
@@ -931,21 +954,22 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
RunListenServer() {
|
||||
if (!START_PORT_NUMBER || START_PORT_NUMBER === "undefined")
|
||||
START_PORT_NUMBER = 30000
|
||||
if (!global.START_PORT_NUMBER || global.START_PORT_NUMBER === "undefined")
|
||||
global.START_PORT_NUMBER = 30000
|
||||
let SELF = this;
|
||||
SELF.port = START_PORT_NUMBER
|
||||
ToLogClient("Prepare to run TCP server on " + LISTEN_IP + ":" + SELF.port)
|
||||
this.Server.listen(SELF.port, LISTEN_IP, function() {
|
||||
SELF.port = global.START_PORT_NUMBER
|
||||
global.ToLogClient("Prepare to run TCP server on " + global.LISTEN_IP + ":" + SELF.port)
|
||||
this.Server.listen(SELF.port, global.LISTEN_IP, function() {
|
||||
if (SELF.CanSend < 2)
|
||||
ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port)
|
||||
global.ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port)
|
||||
SELF.CanSend++
|
||||
var Hash;
|
||||
Hash = global.sha3(SELF.addrStr)
|
||||
SELF.ServerSign = secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature
|
||||
SELF.ServerSign = global.secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature
|
||||
})
|
||||
}
|
||||
FindInternetIP() {
|
||||
let Stun = global.Stun;
|
||||
let SELF = this;
|
||||
let server = Stun.createServer();
|
||||
const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST);
|
||||
@@ -958,7 +982,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
SELF.CanSend++
|
||||
global.INTERNET_IP_FROM_STUN = value.address
|
||||
if (!SELF.ip)
|
||||
SELF.ip = INTERNET_IP_FROM_STUN
|
||||
SELF.ip = global.INTERNET_IP_FROM_STUN
|
||||
if (server)
|
||||
server.close()
|
||||
SELF.RunListenServer()
|
||||
@@ -973,11 +997,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
})
|
||||
}
|
||||
CLOSE_SOCKET(Context, CurTime) {
|
||||
AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
||||
CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
||||
global.AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
||||
global.CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
||||
}
|
||||
SendCloseSocket(Socket, Str) {
|
||||
AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
||||
global.AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
||||
if (Socket.WasClose) {
|
||||
return;
|
||||
}
|
||||
@@ -985,12 +1009,12 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) {
|
||||
}
|
||||
else {
|
||||
AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
||||
global.AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
||||
Socket.end(this.GetBufFromData("CLOSE_SOCKET", Str, 2))
|
||||
}
|
||||
CloseSocket(Socket, Str)
|
||||
global.CloseSocket(Socket, Str)
|
||||
}
|
||||
AddCheckErrCount(Node, Count, StrErr) {
|
||||
AddCheckErrCount(Node, Count, StrErr?) {
|
||||
if (!Node)
|
||||
return;
|
||||
if (!Count)
|
||||
@@ -1016,7 +1040,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
};
|
||||
global.ContextPackets = new STreeBuffer(10 * 1000, CompareItemHash32, "object");
|
||||
global.ContextPackets = new STreeBuffer(10 * 1000, global.CompareItemHash32, "object");
|
||||
|
||||
function CalcStatArr(arr, arrAvg, arrNext, Period) {
|
||||
var arrSum = [arr[0]];
|
||||
|
||||
Reference in New Issue
Block a user