/// <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)); }
private void PostHostInfo(AtomCollection parent, Channel channel, bool playing) { var host = channel.SelfNode; var hostinfo = new AtomCollection(); hostinfo.SetHostChannelID(channel.ChannelID); hostinfo.SetHostSessionID(PeerCast.SessionID); var globalendpoint = host.GlobalEndPoint; if (globalendpoint != null) { hostinfo.AddHostIP(globalendpoint.Address); hostinfo.AddHostPort(globalendpoint.Port); } var localendpoint = host.LocalEndPoint; 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)); } hostinfo.SetHostVersion(PCP_VERSION); hostinfo.SetHostVersionVP(PCP_VERSION_VP); hostinfo.SetHostFlags1( (PeerCast.AccessController.IsChannelRelayable(channel) ? PCPHostFlags1.Relay : 0) | (PeerCast.AccessController.IsChannelPlayable(channel) ? PCPHostFlags1.Direct : 0) | ((!PeerCast.IsFirewalled.HasValue || PeerCast.IsFirewalled.Value) ? PCPHostFlags1.Firewalled : 0) | PCPHostFlags1.Tracker | (playing ? PCPHostFlags1.Receiving : PCPHostFlags1.None)); parent.SetHost(hostinfo); }
private void PostHostInfo(AtomCollection parent, Channel channel, bool playing) { var host = channel.SelfNode; var hostinfo = new AtomCollection(); hostinfo.SetHostChannelID(channel.ChannelID); hostinfo.SetHostSessionID(PeerCast.SessionID); var globalendpoint = host.GlobalEndPoint; if (globalendpoint!=null) { hostinfo.AddHostIP(globalendpoint.Address); hostinfo.AddHostPort(globalendpoint.Port); } var localendpoint = host.LocalEndPoint; 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)); } hostinfo.SetHostVersion(PCP_VERSION); hostinfo.SetHostVersionVP(PCP_VERSION_VP); hostinfo.SetHostFlags1( (PeerCast.AccessController.IsChannelRelayable(channel) ? PCPHostFlags1.Relay : 0) | (PeerCast.AccessController.IsChannelPlayable(channel) ? PCPHostFlags1.Direct : 0) | ((!PeerCast.IsFirewalled.HasValue || PeerCast.IsFirewalled.Value) ? PCPHostFlags1.Firewalled : 0) | PCPHostFlags1.Tracker | (playing ? PCPHostFlags1.Receiving : PCPHostFlags1.None)); parent.SetHost(hostinfo); }