示例#1
0
		internal static NetworkPath InternalChooseDagNetworkPath(string targetName, string networkName, NetworkPath.ConnectionPurpose purpose)
		{
			string nodeNameFromFqdn = MachineName.GetNodeNameFromFqdn(targetName);
			NetworkManager manager = NetworkManager.GetManager();
			NetworkPath networkPath = null;
			DagNetConfig dagNetConfig = null;
			manager.TryWaitForInitialization();
			if (manager.m_netMap != null)
			{
				networkPath = manager.m_netMap.ChoosePath(nodeNameFromFqdn, networkName);
			}
			else
			{
				DagNetRoute dagNetRoute = null;
				DagNetRoute[] array = DagNetChooser.ProposeRoutes(targetName, out dagNetConfig);
				if (networkName != null)
				{
					foreach (DagNetRoute dagNetRoute2 in array)
					{
						if (StringUtil.IsEqualIgnoreCase(dagNetRoute2.NetworkName, networkName))
						{
							dagNetRoute = dagNetRoute2;
							break;
						}
					}
				}
				else if (array != null && array.Length > 0)
				{
					dagNetRoute = array[0];
				}
				if (dagNetRoute != null)
				{
					networkPath = new NetworkPath(targetName, dagNetRoute.TargetIPAddr, dagNetRoute.TargetPort, dagNetRoute.SourceIPAddr);
					networkPath.NetworkName = dagNetRoute.NetworkName;
					networkPath.CrossSubnet = dagNetRoute.IsCrossSubnet;
				}
			}
			if (networkPath == null)
			{
				networkPath = NetworkManager.BuildDnsNetworkPath(targetName, NetworkManager.GetReplicationPort());
			}
			networkPath.Purpose = purpose;
			if (dagNetConfig == null)
			{
				dagNetConfig = DagNetEnvironment.FetchNetConfig();
			}
			networkPath.ApplyNetworkPolicy(dagNetConfig);
			return networkPath;
		}
示例#2
0
        public TcpClientChannel OpenChannel(string targetServerName, ISimpleBufferPool socketStreamBufferPool, IPool <SocketStreamAsyncArgs> socketStreamAsyncArgPool, SocketStream.ISocketStreamPerfCounters perfCtrs, out NetworkPath netPath)
        {
            DagNetConfig dagConfig;

            DagNetRoute[]    array            = DagNetChooser.ProposeRoutes(targetServerName, out dagConfig);
            TcpClientChannel tcpClientChannel = null;

            netPath = null;
            NetworkTransportException ex = null;

            if (array != null)
            {
                foreach (DagNetRoute dagNetRoute in array)
                {
                    netPath             = new NetworkPath(targetServerName, dagNetRoute.TargetIPAddr, dagNetRoute.TargetPort, dagNetRoute.SourceIPAddr);
                    netPath.CrossSubnet = dagNetRoute.IsCrossSubnet;
                    this.ApplySocketStreamArgs(netPath, socketStreamBufferPool, socketStreamAsyncArgPool, perfCtrs);
                    netPath.ApplyNetworkPolicy(dagConfig);
                    tcpClientChannel = this.TryConnect(netPath, out ex);
                    if (tcpClientChannel != null)
                    {
                        break;
                    }
                }
            }
            if (tcpClientChannel == null)
            {
                netPath = this.BuildDnsNetworkPath(targetServerName, (int)NetworkManager.GetReplicationPort());
                this.ApplySocketStreamArgs(netPath, socketStreamBufferPool, socketStreamAsyncArgPool, perfCtrs);
                netPath.ApplyNetworkPolicy(dagConfig);
                tcpClientChannel = this.TryConnect(netPath, out ex);
                if (tcpClientChannel == null)
                {
                    throw ex;
                }
            }
            return(tcpClientChannel);
        }
示例#3
0
        // Token: 0x06002397 RID: 9111 RVA: 0x000A6BF8 File Offset: 0x000A4DF8
        public static bool StartListening(bool useExchangeSid = true)
        {
            ExTraceGlobals.MonitoredDatabaseTracer.TraceDebug(0L, "Network TCP listener start listening.");
            bool result;

            lock (RemoteDataProvider.s_singletonLock)
            {
                if (RemoteDataProvider.s_initialized)
                {
                    ExTraceGlobals.MonitoredDatabaseTracer.TraceDebug(0L, "StartListening returned because it is already initialized");
                    result = RemoteDataProvider.s_initialized;
                }
                else if (ThirdPartyManager.IsInitialized && ThirdPartyManager.IsThirdPartyReplicationEnabled)
                {
                    RemoteDataProvider.s_tprEnabled = true;
                    ExTraceGlobals.MonitoredDatabaseTracer.TraceDebug(0L, "StartListening does nothing because TPR is enabled");
                    result = true;
                }
                else
                {
                    RemoteDataProvider.s_tprEnabled = false;
                    if (RemoteDataProvider.s_selfCheckTimer == null)
                    {
                        RemoteDataProvider.s_selfCheckTimer = new Timer(new TimerCallback(RemoteDataProvider.SelfCheck), null, RegistryParameters.RemoteDataProviderSelfCheckInterval, RegistryParameters.RemoteDataProviderSelfCheckInterval);
                    }
                    try
                    {
                        if (useExchangeSid)
                        {
                            RemoteDataProvider.s_exchangeGroupSid = ObjectSecurity.ExchangeServersUsgSid;
                        }
                        if (RemoteDataProvider.s_tcpListener == null)
                        {
                            TcpListener.Config config = new TcpListener.Config();
                            config.ListenPort            = (int)NetworkManager.GetReplicationPort();
                            config.LocalNodeName         = Environment.MachineName;
                            config.AuthConnectionHandOff = new TcpListener.AuthenticatedConnectionHandler(NetworkChannel.ServiceRequests);
                            TcpListener tcpListener = new TcpListener();
                            Exception   ex          = tcpListener.StartListening(config);
                            if (ex != null)
                            {
                                ReplayEventLogConstants.Tuple_TcpListenerFailedToStart.LogEvent(null, new object[]
                                {
                                    ex
                                });
                                ExTraceGlobals.MonitoredDatabaseTracer.TraceError <Exception>(0L, "Network TCP listener could not be started: {0}", ex);
                                return(false);
                            }
                            RemoteDataProvider.s_tcpListener = tcpListener;
                        }
                        ClusterBatchWriter.Start();
                        RemoteDataProvider.s_initialized = true;
                        ExTraceGlobals.MonitoredDatabaseTracer.TraceDebug(0L, "Network TCP listener successfully activated");
                    }
                    catch (ADTransientException ex2)
                    {
                        ReplayEventLogConstants.Tuple_TcpListenerFailedToStart.LogEvent(null, new object[]
                        {
                            ex2
                        });
                    }
                    catch (ADExternalException ex3)
                    {
                        ReplayEventLogConstants.Tuple_TcpListenerFailedToStart.LogEvent(null, new object[]
                        {
                            ex3
                        });
                    }
                    catch (ADOperationException ex4)
                    {
                        ReplayEventLogConstants.Tuple_TcpListenerFailedToStart.LogEvent(null, new object[]
                        {
                            ex4
                        });
                    }
                    finally
                    {
                        if (!RemoteDataProvider.s_initialized)
                        {
                            ClusterBatchWriter.Stop();
                        }
                    }
                    result = RemoteDataProvider.s_initialized;
                }
            }
            return(result);
        }