/// <summary> /// TCP调用服务端验证 /// </summary> /// <param name="socket">TCP调用套接字</param> /// <param name="data">参数序列化数据</param> private void verify(socket socket, ref subArray <byte> data) { fastCSharp.net.returnValue.type returnType; try { fastCSharp.net.tcp.timeVerifyServer.input inputParameter = default(fastCSharp.net.tcp.timeVerifyServer.input); if (fastCSharp.emit.dataDeSerializer.DeSerialize(ref data, ref inputParameter)) { fastCSharp.net.returnValue <fastCSharp.net.tcp.timeVerifyServer.output> returnValue = new returnValue <timeVerifyServer.output> { Value = new fastCSharp.net.tcp.timeVerifyServer.output { Ret = timeVerify.Verify(socket, inputParameter.randomPrefix, inputParameter.md5Data, ref inputParameter.ticks) } }; returnValue.Value.ticks = inputParameter.ticks; if (returnValue.Value.Ret) { socket.SetVerifyMethod(); } returnValue.Type = net.returnValue.type.Success; socket.SendStream(ref socket.identity, ref returnValue, default(tcp.commandServer.commandFlags)); return; } returnType = fastCSharp.net.returnValue.type.ServerDeSerializeError; } catch (Exception error) { returnType = fastCSharp.net.returnValue.type.ServerException; fastCSharp.log.Error.Add(error, null, true); } socket.SendStream(ref socket.identity, returnType); }
public bool Verify(fastCSharp.net.tcp.commandLoadBalancingServer.commandClient client) #endif { #if NOJIT fastCSharp.net.tcp.commandLoadBalancingServer.commandClient client = (fastCSharp.net.tcp.commandLoadBalancingServer.commandClient)clientObject; #endif fastCSharp.net.tcp.timeVerifyServer.input input = new fastCSharp.net.tcp.timeVerifyServer.input(); fastCSharp.net.tcp.commandClient commandClient = client.TcpCommandClient; fastCSharp.code.cSharp.tcpServer attribute = commandClient.Attribute; string verifyString = attribute.VerifyString; if (verifyString == null) { return(client.Verify(ref input).Value.Ret); } ulong markData = 0; if (attribute.IsMarkData) { markData = attribute.VerifyHashCode; } input.ticks = date.UtcNow.Ticks; do { input.randomPrefix = random.Default.SecureNextULongNotZero(); while (input.randomPrefix == markData) { input.randomPrefix = random.Default.SecureNextULongNotZero(); } commandClient.ReceiveMarkData = attribute.IsMarkData ? markData ^ input.randomPrefix : 0UL; commandClient.SendMarkData = 0; input.MD5(verifyString); long lastTicks = input.ticks; fastCSharp.net.returnValue <fastCSharp.net.tcp.timeVerifyServer.output> isVerify = client.Verify(ref input); if (isVerify.Value.Ret) { commandClient.SendMarkData = commandClient.ReceiveMarkData; return(true); } if (isVerify.Type != fastCSharp.net.returnValue.type.Success || input.ticks <= lastTicks) { return(false); } ++input.ticks; log.Error.Add("TCP客户端验证时间失败重试", null, false); }while (true); }
/// <summary> /// TCP调用客户端验证 /// </summary> /// <param name="input"></param> /// <returns>是否验证成功</returns> internal fastCSharp.net.returnValue <fastCSharp.net.tcp.timeVerifyServer.output> Verify(ref fastCSharp.net.tcp.timeVerifyServer.input input) { keyValue <tcp.commandClient.streamCommandSocket, fastCSharp.net.waitCall <fastCSharp.net.tcp.timeVerifyServer.output> > wait = getWait <fastCSharp.net.tcp.timeVerifyServer.output>(true); if (wait.Value != null) { try { fastCSharp.net.tcp.timeVerifyServer.output output = new fastCSharp.net.tcp.timeVerifyServer.output(); wait.Key.Get(wait.Value, verifyCommand, ref input, ref output, false); fastCSharp.net.returnValue <fastCSharp.net.tcp.timeVerifyServer.output> outputReturn; wait.Value.Get(out outputReturn); return(outputReturn); } catch (Exception error) { log.Error.Add(error, null, false); } } return(default(fastCSharp.net.returnValue <fastCSharp.net.tcp.timeVerifyServer.output>)); }