Beispiel #1
0
            private JObject GetStatus()
            {
                var res = new JObject();

                res["uptime"]       = (int)PeerCast.Uptime.TotalSeconds;
                res["isFirewalled"] = PeerCast.IsFirewalled;
                var endpoint =
                    PeerCast.GetGlobalEndPoint(
                        System.Net.Sockets.AddressFamily.InterNetwork,
                        Core.OutputStreamType.Relay);

                res["globalRelayEndPoint"] = endpoint != null ? new JArray(endpoint.Address.ToString(), endpoint.Port) : null;
                endpoint =
                    PeerCast.GetGlobalEndPoint(
                        System.Net.Sockets.AddressFamily.InterNetwork,
                        Core.OutputStreamType.Play);
                res["globalDirectEndPoint"] = endpoint != null ? new JArray(endpoint.Address.ToString(), endpoint.Port) : null;
                endpoint =
                    PeerCast.GetLocalEndPoint(
                        System.Net.Sockets.AddressFamily.InterNetwork,
                        Core.OutputStreamType.Relay);
                res["localRelayEndPoint"] = endpoint != null ? new JArray(endpoint.Address.ToString(), endpoint.Port) : null;
                endpoint =
                    PeerCast.GetLocalEndPoint(
                        System.Net.Sockets.AddressFamily.InterNetwork,
                        Core.OutputStreamType.Play);
                res["localDirectEndPoint"] = endpoint != null ? new JArray(endpoint.Address.ToString(), endpoint.Port) : null;
                return(res);
            }
Beispiel #2
0
        /// <summary>
        /// 現在のチャンネルとPeerCastの状態からHostパケットを作ります
        /// </summary>
        /// <returns>作ったPCP_HOSTパケット</returns>
        public virtual Atom CreateHostPacket()
        {
            var host = new AtomCollection();

            host.SetHostChannelID(Channel.ChannelID);
            host.SetHostSessionID(PeerCast.SessionID);
            var globalendpoint =
                PeerCast.GetGlobalEndPoint(
                    RemoteEndPoint.AddressFamily,
                    OutputStreamType.Relay);

            if (globalendpoint != null)
            {
                host.AddHostIP(globalendpoint.Address);
                host.AddHostPort(globalendpoint.Port);
            }
            var localendpoint =
                PeerCast.GetLocalEndPoint(
                    RemoteEndPoint.AddressFamily,
                    OutputStreamType.Relay);

            if (localendpoint != null)
            {
                host.AddHostIP(localendpoint.Address);
                host.AddHostPort(localendpoint.Port);
            }
            host.SetHostNumListeners(Channel.LocalDirects);
            host.SetHostNumRelays(Channel.LocalRelays);
            host.SetHostUptime(Channel.Uptime);
            if (Channel.Contents.Count > 0)
            {
                host.SetHostOldPos((uint)(Channel.Contents.Oldest.Position & 0xFFFFFFFFU));
                host.SetHostNewPos((uint)(Channel.Contents.Newest.Position & 0xFFFFFFFFU));
            }
            host.SetHostVersion(PCP_VERSION);
            host.SetHostVersionVP(PCP_VERSION_VP);
            host.SetHostFlags1(
                (PeerCast.AccessController.IsChannelRelayable(Channel) ? PCPHostFlags1.Relay : 0) |
                (PeerCast.AccessController.IsChannelPlayable(Channel) ? PCPHostFlags1.Direct : 0) |
                ((!PeerCast.IsFirewalled.HasValue || PeerCast.IsFirewalled.Value) ? PCPHostFlags1.Firewalled : 0) |
                (RecvRate > 0 ? PCPHostFlags1.Receiving : 0));
            host.SetHostUphostIP(RemoteEndPoint.Address);
            host.SetHostUphostPort(RemoteEndPoint.Port);
            return(new Atom(Atom.PCP_HOST, host));
        }
        /// <summary>
        /// 現在のチャンネルとPeerCastの状態からHostパケットを作ります
        /// </summary>
        /// <returns>作ったPCP_HOSTパケット</returns>
        private Atom CreatePCPHOST()
        {
            var host = new AtomCollection();

            host.SetHostChannelID(Channel.ChannelID);
            host.SetHostSessionID(PeerCast.SessionID);
            var globalendpoint =
                PeerCast.GetGlobalEndPoint(
                    connection.RemoteEndPoint.AddressFamily,
                    OutputStreamType.Relay);

            if (globalendpoint != null)
            {
                host.AddHostIP(globalendpoint.Address);
                host.AddHostPort(globalendpoint.Port);
            }
            var localendpoint =
                PeerCast.GetLocalEndPoint(
                    connection.RemoteEndPoint.AddressFamily,
                    OutputStreamType.Relay);

            if (localendpoint != null)
            {
                host.AddHostIP(localendpoint.Address);
                host.AddHostPort(localendpoint.Port);
            }
            host.SetHostNumListeners(Channel.LocalDirects);
            host.SetHostNumRelays(Channel.LocalRelays);
            host.SetHostUptime(Channel.Uptime);
            if (Channel.Contents.Count > 0)
            {
                host.SetHostOldPos((uint)(Channel.Contents.Oldest.Position & 0xFFFFFFFFU));
                host.SetHostNewPos((uint)(Channel.Contents.Newest.Position & 0xFFFFFFFFU));
            }
            PCPVersion.SetHostVersion(host);
            host.SetHostFlags1(
                (PeerCast.AccessController.IsChannelRelayable(Channel) ? PCPHostFlags1.Relay : 0) |
                (PeerCast.AccessController.IsChannelPlayable(Channel) ? PCPHostFlags1.Direct : 0) |
                ((PeerCast.GetPortStatus(connection.RemoteEndPoint.AddressFamily) != PortStatus.Open) ? PCPHostFlags1.Firewalled : 0) |
                (RecvRate > 0 ? PCPHostFlags1.Receiving : 0));
            host.SetHostUphostIP(connection.RemoteEndPoint.Address);
            host.SetHostUphostPort(connection.RemoteEndPoint.Port);
            return(new Atom(Atom.PCP_HOST, host));
        }
        private void PostHostInfo(AtomCollection parent, Channel channel, bool playing)
        {
            var hostinfo = new AtomCollection();

            hostinfo.SetHostChannelID(channel.ChannelID);
            hostinfo.SetHostSessionID(PeerCast.SessionID);
            var globalendpoint = PeerCast.GetGlobalEndPoint(AddressFamily.InterNetwork, OutputStreamType.Relay);

            if (globalendpoint != null)
            {
                hostinfo.AddHostIP(globalendpoint.Address);
                hostinfo.AddHostPort(globalendpoint.Port);
            }
            var localendpoint = PeerCast.GetLocalEndPoint(AddressFamily.InterNetwork, OutputStreamType.Relay);

            if (localendpoint != null)
            {
                hostinfo.AddHostIP(localendpoint.Address);
                hostinfo.AddHostPort(localendpoint.Port);
            }
            hostinfo.SetHostNumListeners(channel.TotalDirects);
            hostinfo.SetHostNumRelays(channel.TotalRelays);
            hostinfo.SetHostUptime(channel.Uptime);
            if (channel.Contents.Count > 0)
            {
                hostinfo.SetHostOldPos((uint)(channel.Contents.Oldest.Position & 0xFFFFFFFFU));
                hostinfo.SetHostNewPos((uint)(channel.Contents.Newest.Position & 0xFFFFFFFFU));
            }
            PCPVersion.SetHostVersion(hostinfo);
            var relayable  = PeerCast.AccessController.IsChannelRelayable(channel);
            var playable   = PeerCast.AccessController.IsChannelPlayable(channel) && PeerCast.FindListener(remoteEndPoint.Address, OutputStreamType.Play) != null;
            var firewalled = !PeerCast.IsFirewalled.HasValue || PeerCast.IsFirewalled.Value || PeerCast.FindListener(remoteEndPoint.Address, OutputStreamType.Relay) == null;
            var receiving  = playing && channel.Status == SourceStreamStatus.Receiving;

            hostinfo.SetHostFlags1(
                (relayable  ? PCPHostFlags1.Relay      : 0) |
                (playable   ? PCPHostFlags1.Direct     : 0) |
                (firewalled ? PCPHostFlags1.Firewalled : 0) |
                PCPHostFlags1.Tracker |
                (receiving ? PCPHostFlags1.Receiving : PCPHostFlags1.None));
            parent.SetHost(hostinfo);
        }