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; }
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); }
// 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); }