Пример #1
0
        public RelayTunnel(ILogger logger, TunnelMetrics metrics, HybridConnectionStream relayStream, ILocalDataChannelFactory localFactory, TunnelCompleted tunnelCompleted)
        {
            _log = logger.ForContext(GetType());

            _uplinkPumps             = new ConcurrentDictionary <object, UplinkPump>();
            _localDataChannelFactory = localFactory;
            _tunnelCompleted         = tunnelCompleted;
            _metrics = metrics;

            _relayDataChannel = new RemoteRelayDataChannel(logger, metrics.Remote, relayStream);

            _downlinkPump = new DownlinkPump(logger, _relayDataChannel, CreateLocalDataChannel);
        }
Пример #2
0
        public ClientTcpForwarder(ILogger logger, MetricsRegistry registry, ServiceNamespaceOptions serviceNamespace, int fromPort, PortMappingOptions portMappings)
        {
            _log           = logger.ForContext(GetType());
            _firewallRules = new FirewallRules(portMappings);
            _fromPort      = fromPort;
            _bindTo        = portMappings.BindToAddress;

            var metrics = new TunnelMetrics(registry, new MetricTags(
                                                new [] { "entityPath", "fromPort" }, new [] { portMappings.EntityPath, fromPort.ToString() }));

            _relayFactory = new RelayTunnelFactory(logger, metrics, serviceNamespace, portMappings);

            _log.Information("TCP Forwarder for port {port} initialized", fromPort);
        }
        private ServiceForwarder(ILogger logger, MetricsRegistry registry, int forwarderIdx, HybridConnectionListener listener, RelayMetadata metadata, string entityPath)
        {
            _log = logger.ForContext(GetType());

            _forwarderIdx  = forwarderIdx;
            _relayListener = listener;
            _metadata      = metadata;

            var tags = new MetricTags(nameof(entityPath), entityPath);

            var metrics = new TunnelMetrics(registry, tags);

            _tunnelFactory = new RelayTunnelFactory(logger, metrics);
        }
Пример #4
0
        public RelayTunnelFactory(ILogger logger, TunnelMetrics metrics, ServiceNamespaceOptions serviceNamespace, PortMappingOptions portMappings)
        {
            _log = logger?.ForContext(GetType());

            _poolLocker       = new object();
            _serviceNamespace = serviceNamespace;
            _portMappings     = portMappings;

            _replacedTunnels = new ConcurrentDictionary <object, RelayTunnel>();

            _tunnels = new RelayTunnel[portMappings.RelayChannelCount];

            _metrics = metrics;

            for (var i = 0; i < portMappings.RelayChannelCount; i++)
            {
                _tunnels[i] = new RelayTunnel(logger, _metrics, serviceNamespace, portMappings.EntityPath, portMappings.RemoteConfigurationKey, portMappings.RelayConnectionTtlSeconds);
            }
        }
Пример #5
0
        public RelayTunnel(
            ILogger logger, TunnelMetrics metrics,
            ServiceNamespaceOptions serviceNamespace, string entityPath, int remoteConfigurationKey, int ttlSeconds)
        {
            if (string.IsNullOrWhiteSpace(entityPath))
            {
                throw new ArgumentNullException(nameof(entityPath));
            }

            _log            = logger.ForContext(GetType());
            _uplinkPumps    = new ConcurrentDictionary <object, UplinkPump>();
            _establishLock  = new SemaphoreSlim(1, 1);
            _relay          = new UriBuilder("sb", serviceNamespace.ServiceNamespace, -1, entityPath).Uri;
            _tokenProvider  = serviceNamespace.CreateSasTokenProvider();
            _ttl            = TimeSpan.FromSeconds(ttlSeconds);
            _tunnelPreamble = new TunnelPreamble(remoteConfigurationKey);
            _canAcceptUntil = DateTime.MaxValue;
            _metrics        = metrics;
        }
Пример #6
0
 public RelayTunnelFactory(ILogger logger, TunnelMetrics metrics)
 {
     _log     = logger.ForContext(GetType());
     _metrics = metrics;
     _tunnels = new ConcurrentDictionary <object, RelayTunnel>();
 }