private static I2NPMessage CreateReplyMessage( II2NPHeader msg, TunnelBuildRequestDecrypt decrypt, BuildResponseRecord.RequestResponse response) { var newrecords = decrypt.CreateTunnelBuildReplyRecords(response); if (msg.MessageType == I2NPMessage.MessageTypes.VariableTunnelBuild) { return(new VariableTunnelBuildMessage(newrecords)); } else { return(new TunnelBuildMessage(newrecords)); } }
private void HandleEndpointTunnelRequest( II2NPHeader msg, TunnelBuildRequestDecrypt decrypt) { var config = new TunnelConfig( TunnelConfig.TunnelDirection.Inbound, TunnelConfig.TunnelPool.External, new TunnelInfo(new List <HopInfo> { new HopInfo( RouterContext.Inst.MyRouterIdentity, new I2PTunnelId()) } )); var tunnel = new EndpointTunnel(this, config, decrypt.Decrypted); tunnel.EstablishedTime.SetNow(); var doaccept = AcceptingTunnels(decrypt.Decrypted); var response = doaccept ? BuildResponseRecord.RequestResponse.Accept : BuildResponseRecord.DefaultErrorReply; Logging.LogDebug($"HandleEndpointTunnelRequest {tunnel.TunnelDebugTrace}: " + $"{tunnel.Destination.Id32Short} Endpoint tunnel request: {response} " + $"for tunnel id {tunnel.ReceiveTunnelId}."); var newrecords = decrypt.CreateTunnelBuildReplyRecords(response); var responsemessage = new VariableTunnelBuildReplyMessage( newrecords.Select(r => new BuildResponseRecord(r)), tunnel.ResponseMessageId); var buildreplymsg = new TunnelGatewayMessage( responsemessage, tunnel.ResponseTunnelId); if (response == BuildResponseRecord.RequestResponse.Accept) { RunningEndpointTunnels[tunnel] = 1; TunnelMgr.AddTunnel(tunnel); AcceptedTunnelBuildRequest(decrypt.Decrypted); } TransportProvider.Send(tunnel.Destination, buildreplymsg); }