protected void OnPCPOleh(Atom atom)
        {
            var rip = atom.Children.GetHeloRemoteIP();

            if (rip != null)
            {
                var global_addr = PeerCast.GetGlobalAddress(rip.AddressFamily);
                if (global_addr == null ||
                    global_addr.GetAddressLocality() <= rip.GetAddressLocality())
                {
                    PeerCast.SetGlobalAddress(rip);
                }
            }
            var port = atom.Children.GetHeloPort();

            if (port.HasValue)
            {
                PeerCast.SetPortStatus(rip.AddressFamily, port.Value != 0 ? PortStatus.Open : PortStatus.Firewalled);
            }
            var sid = atom.Children.GetHeloSessionID();

            if (sid.HasValue)
            {
                var host = new HostBuilder();
                host.SessionID      = sid.Value;
                host.GlobalEndPoint = connection.RemoteEndPoint;
                uphost = host.ToHost();
            }
        }
Beispiel #2
0
        public void Apply()
        {
            if (!IsModified)
            {
                return;
            }
            IsModified = false;

            ChannelCleaner.Mode                 = channelCleanupMode;
            ChannelCleaner.InactiveLimit        = channelCleanupInactiveLimit * 60000;
            peerCast.AccessController.MaxRelays = maxRelays;
            peerCast.AccessController.MaxRelaysPerBroadcastChannel = maxRelaysPerBroadcastChannel;
            peerCast.AccessController.MaxRelaysPerRelayChannel     = maxRelaysPerRelayChannel;
            peerCast.AccessController.MaxPlays = maxPlays;
            peerCast.AccessController.MaxPlaysPerBroadcastChannel        = maxPlaysPerBroadcastChannel;
            peerCast.AccessController.MaxPlaysPerRelayChannel            = maxPlaysPerRelayChannel;
            peerCast.AccessController.MaxUpstreamRate                    = maxUpstreamRate;
            peerCast.AccessController.MaxUpstreamRateIPv6                = maxUpstreamRateIPv6;
            peerCast.AccessController.MaxUpstreamRatePerBroadcastChannel = maxUpstreamRatePerBroadcastChannel;
            peerCast.AccessController.MaxUpstreamRatePerRelayChannel     = maxUpstreamRatePerRelayChannel;
            pecaApp.Settings.Get <WPFSettings>().ShowWindowOnStartup     = isShowWindowOnStartup;
            pecaApp.Settings.Get <WPFSettings>().ShowNotifications       = isShowNotifications;
            pecaApp.Settings.Get <WPFSettings>().RemoteNodeName          = remoteNodeName;
            if (IsListenersModified)
            {
                foreach (var listener in peerCast.OutputListeners.ToArray())
                {
                    peerCast.StopListen(listener);
                }
                foreach (var listener in ports)
                {
                    var newlistener = peerCast.StartListen(listener.EndPoint, listener.LocalAccepts, listener.GlobalAccepts);
                    newlistener.GlobalAuthorizationRequired = listener.GlobalAuthRequired;
                    newlistener.LocalAuthorizationRequired  = listener.LocalAuthRequired;
                    newlistener.AuthenticationKey           = listener.AuthenticationKey;
                }
                isListenersModified = false;
            }
            if (IsYellowPagesModified)
            {
                foreach (var yp in peerCast.YellowPages.ToArray())
                {
                    peerCast.RemoveYellowPage(yp);
                }
                foreach (var yp in yellowPages)
                {
                    if (String.IsNullOrEmpty(yp.Name))
                    {
                        continue;
                    }
                    if (String.IsNullOrEmpty(yp.AnnounceUri) && String.IsNullOrEmpty(yp.ChannelsUri))
                    {
                        continue;
                    }
                    Uri announce_uri = String.IsNullOrEmpty(yp.AnnounceUri) ? null : new Uri(yp.AnnounceUri, UriKind.Absolute);
                    Uri channels_uri = String.IsNullOrEmpty(yp.ChannelsUri) ? null : new Uri(yp.ChannelsUri, UriKind.Absolute);
                    peerCast.AddYellowPage(yp.Protocol.Protocol, yp.Name, announce_uri, channels_uri);
                }
                isYellowPagesModified = false;
            }
            var port_mapper = pecaApp.Plugins.GetPlugin <PeerCastStation.UI.PortMapperPlugin>();

            if (port_mapper != null)
            {
                port_mapper.Enabled = portMapperEnabled;
                port_mapper.DiscoverAsync()
                .ContinueWith(prev => OnPropertyChanged("PortMapperExternalAddresses"));
            }
            PortCheckStatus   = PortCheckStatus.Checking;
            PortCheckV6Status = PortCheckStatus.Checking;
            CheckPortAsync().ContinueWith(prev => {
                if (prev.IsCanceled || prev.IsFaulted)
                {
                    PortCheckStatus   = PortCheckStatus.Failed;
                    PortCheckV6Status = PortCheckStatus.Failed;
                }
                else
                {
                    PortCheckStatus   = prev.Result.ResultV4;
                    PortCheckV6Status = prev.Result.ResultV6;
                    peerCast.SetPortStatus(System.Net.Sockets.AddressFamily.InterNetwork, prev.Result.ResultV4 == PortCheckStatus.Opened ? PortStatus.Open : PortStatus.Firewalled);
                    peerCast.SetPortStatus(System.Net.Sockets.AddressFamily.InterNetworkV6, prev.Result.ResultV6 == PortCheckStatus.Opened ? PortStatus.Open : PortStatus.Firewalled);
                }
            });
            pecaApp.SaveSettings();
        }