public OutputStreamBase(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     AccessControlInfo access_control,
     Channel channel,
     byte[] header)
 {
     this.PeerCast = peercast;
       this.InputStream = input_stream;
       this.OutputStream = output_stream;
       this.RemoteEndPoint = remote_endpoint;
       this.AccessControl = access_control;
       this.Channel = channel;
       var ip = remote_endpoint as IPEndPoint;
       this.IsLocal = ip!=null ? Utils.IsSiteLocal(ip.Address) : true;
       this.IsStopped = false;
       this.mainThread = new Thread(MainProc);
       this.mainThread.Name = String.Format("{0}:{1}", this.GetType().Name, remote_endpoint);
       this.SyncContext = new QueuedSynchronizationContext();
       this.Logger = new Logger(this.GetType());
       if (header!=null) {
     this.recvStream.Write(header, 0, header.Length);
       }
       this.SendTimeout = 10000;
 }
 internal SettingViewModel(PeerCastApplication peca_app)
 {
     this.pecaApp = peca_app;
       this.peerCast = peca_app.PeerCast;
       this.AddPortCommand = new Command(() => AddPort());
       this.RemovePortCommand = new Command(() => RemovePort(), () => SelectedPort!=null);
       this.AddYellowPageCommand = new Command(() => AddYellowPage());
       this.RemoveYellowPageCommand = new Command(() => RemoveYellowPage(), () => SelectedYellowPage!=null);
       this.CheckBandwidth = new CheckBandwidthCommand(this);
       channelCleanupMode = ChannelCleaner.Mode;
       channelCleanupInactiveLimit = ChannelCleaner.InactiveLimit/60000;
       maxRelays           = peerCast.AccessController.MaxRelays;
       maxRelaysPerChannel = peerCast.AccessController.MaxRelaysPerChannel;
       maxPlays            = peerCast.AccessController.MaxPlays;
       maxPlaysPerChannel  = peerCast.AccessController.MaxPlaysPerChannel;
       maxUpstreamRate           = peerCast.AccessController.MaxUpstreamRate;
       maxUpstreamRatePerChannel = peerCast.AccessController.MaxUpstreamRatePerChannel;
       isShowWindowOnStartup = pecaApp.Settings.Get<WPFSettings>().ShowWindowOnStartup;
       ports = new ObservableCollection<OutputListenerViewModel>(
     peerCast.OutputListeners
     .Select(listener => new OutputListenerViewModel(this, listener))
       );
       yellowPages = new ObservableCollection<YellowPageClientViewModel>(
     peerCast.YellowPages
     .Select(yp => new YellowPageClientViewModel(this, yp))
       );
 }
Beispiel #3
0
 /// <summary>
 /// チャンネルIDを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 protected Channel(PeerCast peercast, NetworkType network, Guid channel_id)
 {
     this.PeerCast  = peercast;
     this.Network   = network;
     this.ChannelID = channel_id;
     this.contents  = new ContentCollection(this);
 }
Beispiel #4
0
 /// <summary>
 /// 指定したエンドポイントで接続待ち受けをするOutputListenerを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="ip">待ち受けをするエンドポイント</param>
 /// <param name="local_accepts">リンクローカルな接続先に許可する出力ストリームタイプ</param>
 /// <param name="global_accepts">リンクグローバルな接続先に許可する出力ストリームタイプ</param>
 internal OutputListener(
     PeerCast peercast,
     IConnectionHandler connection_handler,
     IPEndPoint ip,
     OutputStreamType local_accepts,
     OutputStreamType global_accepts)
 {
     this.PeerCast                  = peercast;
     this.localOutputAccepts        = local_accepts;
     this.globalOutputAccepts       = global_accepts;
     this.LoopbackAccessControlInfo = new AccessControlInfo(
         OutputStreamType.All,
         false,
         null);
     UpdateLocalAccessControlInfo();
     UpdateGlobalAccessControlInfo();
     this.ConnectionHandler = connection_handler;
     server = new TcpListener(ip);
     if (Environment.OSVersion.Platform == PlatformID.Win32NT)
     {
         //Windowsの時だけReuseAddressをつける。
         //Windows以外ではReuseAddressがSO_REUSEADDR+SO_REUSEPORT扱いになり
         //monoの4.6ではLinuxでUDP以外にSO_REUSEPORTを付けようとすると失敗する。
         //そのかわりmonoではSO_REUSEADDRが標準で付いてるようなので
         //Windows以外は明示的には付けないようにした。
         server.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
     }
     if (ip.AddressFamily == AddressFamily.InterNetworkV6)
     {
         server.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, true);
     }
     server.Start(MaxPendingConnections);
     listenTask = StartListen(server, cancellationSource.Token);
 }
        internal YellowPagesEditViewModel(PeerCast peerCast)
        {
            protocols = peerCast.YellowPageFactories
            .Select(factory => new YellowPageFactoryItem(factory)).ToArray();
              add = new Command(() =>
              {
            if (String.IsNullOrEmpty(Name)
            || SelectedProtocol == null)
              return;
            var factory = SelectedProtocol.Factory;
            var protocol = factory.Protocol;
            if (String.IsNullOrEmpty(protocol))
              return;

            Uri uri;
            var md = Regex.Match(Address, @"\A([^:/]+)(:(\d+))?\Z");
            if (md.Success &&
              Uri.CheckHostName(md.Groups[1].Value) != UriHostNameType.Unknown &&
              Uri.TryCreate(protocol + "://" + Address, UriKind.Absolute, out uri) &&
              factory.CheckURI(uri))
            {
            }
            else if (Uri.TryCreate(Address, UriKind.Absolute, out uri) &&
              factory.CheckURI(uri))
            {
            }
            else
            {
              return;
            }

            peerCast.AddYellowPage(protocol, Name, uri);
              });
        }
        public OutputStreamBase(
            PeerCast peercast,
            Stream input_stream,
            Stream output_stream,
            EndPoint remote_endpoint,
            AccessControlInfo access_control,
            Channel channel,
            byte[] header)
        {
            this.PeerCast               = peercast;
            this.Connection             = new StreamConnection(input_stream, output_stream, header);
            this.Connection.SendTimeout = 10000;
            this.RemoteEndPoint         = remote_endpoint;
            this.AccessControl          = access_control;
            this.Channel = channel;
            var ip = remote_endpoint as IPEndPoint;

            this.IsLocal = ip != null?ip.Address.IsSiteLocal() : true;

            this.IsStopped       = false;
            this.mainThread      = new Thread(MainProc);
            this.mainThread.Name = String.Format("{0}:{1}", this.GetType().Name, remote_endpoint);
            this.SyncContext     = new QueuedSynchronizationContext();
            this.Logger          = new Logger(this.GetType());
        }
        public OutputStreamBase(
            PeerCast peercast,
            Stream input_stream,
            Stream output_stream,
            EndPoint remote_endpoint,
            Channel channel,
            byte[] header)
        {
            this.PeerCast       = peercast;
            this.InputStream    = input_stream;
            this.OutputStream   = output_stream;
            this.RemoteEndPoint = remote_endpoint;
            this.Channel        = channel;
            var ip = remote_endpoint as IPEndPoint;

            this.IsLocal = ip != null?Utils.IsSiteLocal(ip.Address) : true;

            this.IsStopped       = false;
            this.mainThread      = new Thread(MainProc);
            this.mainThread.Name = this.GetType().Name;
            this.SyncContext     = new QueuedSynchronizationContext();
            this.Logger          = new Logger(this.GetType());
            if (header != null)
            {
                this.recvStream.Write(header, 0, header.Length);
            }
        }
Beispiel #8
0
 /// <summary>
 /// チャンネルIDを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 protected Channel(PeerCast peercast, Guid channel_id)
 {
     this.PeerCast            = peercast;
     this.ChannelID           = channel_id;
     contents.ContentChanged += (sender, e) => {
         OnContentChanged();
     };
 }
 public PCPYellowPageClient(PeerCast peercast, string name, Uri uri)
 {
     this.PeerCast = peercast;
       this.Name = name;
       this.Uri = uri;
       this.Logger = new Logger(this.GetType());
       this.AnnouncingStatus = AnnouncingStatus.Idle;
 }
Beispiel #10
0
 /// <summary>
 /// チャンネルIDを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 protected Channel(PeerCast peercast, NetworkType network, Guid channel_id)
 {
     this.PeerCast  = peercast;
     this.Network   = network;
     this.ChannelID = channel_id;
     this.contents  = new ContentCollection(this);
     this.contentSinks.Add(new ChannelEventInvoker(this));
 }
 public RelayTreeViewModel(PeerCast peerCast)
 {
   this.peerCast = peerCast;
   this.RelayTree = new RelayTreeNodeViewModel[0];
   refresh = new Command(
     () => Update(this.channel),
     () => channel!=null);
 }
Beispiel #12
0
 /// <summary>
 /// チャンネルIDを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 protected Channel(PeerCast peercast, NetworkType network, Guid channel_id)
 {
     this.PeerCast     = peercast;
     this.Network      = network;
     this.ChannelID    = channel_id;
     this.contents     = new ContentCollection(this);
     this.contentSinks = ImmutableArray <IContentSink> .Empty;
 }
 public HTTPDummyOutputStream(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint)
     : base(peercast, input_stream, output_stream, remote_endpoint, null, null)
 {
     Logger.Debug("Initialized: Remote {0}", remote_endpoint);
 }
 public PCPSourceConnection(
     PeerCast peercast,
     Channel  channel,
     Uri      source_uri,
     RemoteHostStatus remote_type)
     : base(peercast, channel, source_uri)
 {
     remoteType = remote_type;
 }
 public BroadcastDialog(PeerCast peercast)
 {
   peerCast = peercast;
   InitializeComponent();
   bcContentType.Items.AddRange(peerCast.ContentReaderFactories.Select(reader => new ContentReaderItem(reader)).ToArray());
   bcYP.Items.AddRange(peerCast.YellowPages.Select(yp => new YellowPageItem(yp)).ToArray());
   if (bcContentType.Items.Count>0) bcContentType.SelectedIndex = 0;
   if (bcYP.Items.Count>0) bcYP.SelectedIndex = 0;
 }
 public PCPPongOutputStream(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     IPEndPoint endpoint,
     byte[] header)
     : base(peercast, input_stream, output_stream, endpoint, null, header)
 {
     Logger.Debug("Initialized: Remote {0}", endpoint);
 }
 public BroadcastChannel(
     PeerCast peercast,
     Guid channel_id,
     ChannelInfo channel_info,
     IContentReaderFactory content_reader_factory)
     : base(peercast, channel_id)
 {
     this.ChannelInfo = channel_info;
       this.ContentReaderFactory = content_reader_factory;
 }
        public ConnectionListViewModel(PeerCast peerCast)
        {
            this.peerCast = peerCast;

              close = new Command(
            () => connection.Disconnect(),
            () => connection != null && connection.IsDisconnectable);
              reconnect = new Command(
            () => connection.Reconnect(),
            () => connection != null && connection.IsReconnectable);
        }
Beispiel #19
0
 /// <summary>
 /// チャンネルIDとブロードキャストID、ソースストリームを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 /// <param name="broadcast_id">ブロードキャストID</param>
 /// <param name="source_uri">ソースURI</param>
 public Channel(PeerCast peercast, Guid channel_id, Guid broadcast_id, Uri source_uri)
 {
     this.IsClosed            = true;
     this.PeerCast            = peercast;
     this.SourceUri           = source_uri;
     this.ChannelID           = channel_id;
     this.BroadcastID         = broadcast_id;
     contents.ContentChanged += (sender, e) => {
         OnContentChanged();
     };
 }
 public SourceStreamBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast      = peercast;
     this.Channel       = channel;
     this.SourceUri     = source_uri;
     this.StoppedReason = StopReason.None;
     this.Logger        = new Logger(this.GetType(), source_uri.ToString());
 }
 public SourceConnectionBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast      = peercast;
       this.Channel       = channel;
       this.SourceUri     = source_uri;
       this.StoppedReason = StopReason.None;
       this.SyncContext   = new QueuedSynchronizationContext();
       this.Logger        = new Logger(this.GetType());
 }
        public NotifyIconManager(PeerCast peerCast)
        {
            notifyIcon = CreateNotifyIcon(peerCast);
              notifyIcon.BalloonTipClicked += (sender, e) => {
            if (newVersionInfo == null)
              return;

            new UpdaterWindow() {
              DataContext = new UpdaterViewModel(newVersionInfo)
            }.Show();
              };
        }
 public SourceConnectionBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast      = peercast;
     this.Channel       = channel;
     this.SourceUri     = source_uri;
     this.StoppedReason = StopReason.None;
     this.SyncContext   = new QueuedSynchronizationContext();
     this.Logger        = new Logger(this.GetType());
 }
 public BroadcastChannel(
     PeerCast peercast,
     Guid channel_id,
     ChannelInfo channel_info,
     ISourceStreamFactory source_stream_factory,
     IContentReaderFactory content_reader_factory)
     : base(peercast, channel_id)
 {
     this.ChannelInfo          = channel_info;
     this.SourceStreamFactory  = source_stream_factory;
     this.ContentReaderFactory = content_reader_factory;
 }
 public HTTPDummyOutputStream(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     AccessControlInfo access_control,
     HTTPRequest req)
     : base(peercast, input_stream, output_stream, remote_endpoint, access_control, null, null)
 {
     Logger.Debug("Initialized: Remote {0}", remote_endpoint);
       this.request = req;
 }
 public SourceConnectionBase(
     PeerCast peercast,
     Channel  channel,
     Uri      source_uri)
 {
   this.PeerCast      = peercast;
   this.Channel       = channel;
   this.SourceUri     = source_uri;
   this.StoppedReason = StopReason.None;
   this.Logger        = new Logger(this.GetType());
   this.Status        = ConnectionStatus.Idle;
 }
 public SourceConnectionBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast      = peercast;
     this.Channel       = channel;
     this.SourceUri     = source_uri;
     this.StoppedReason = StopReason.None;
     this.Logger        = new Logger(this.GetType(), source_uri?.ToString());
     this.Status        = ConnectionStatus.Idle;
 }
        public BroadcastViewModel(PeerCast peerCast)
        {
            this.peerCast = peerCast;
              contentTypes = peerCast.ContentReaderFactories
            .Select(reader => new ContentReaderItem(reader)).ToArray();

              yellowPages = new YellowPageItem[] { new YellowPageItem("掲載なし", null) }
            .Concat(peerCast.YellowPages.Select(yp => new YellowPageItem(yp))).ToArray();
              if (contentTypes.Length > 0) contentType = contentTypes[0];

              start = new Command(OnBroadcast,
            () => CanBroadcast(StreamSource, ContentReaderFactory, channelName));
        }
 public SourceStreamBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast      = peercast;
     this.Channel       = channel;
     this.SourceUri     = source_uri;
     this.StoppedReason = StopReason.None;
     this.EventQueue    = new EventQueue <SourceStreamEvent>();
     this.Logger        = new Logger(this.GetType());
     ThreadPool.RegisterWaitForSingleObject(this.EventQueue.WaitHandle, OnEvent, null, Timeout.Infinite, true);
 }
Beispiel #30
0
 public SourceStreamBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast                   = peercast;
     this.Channel                    = channel;
     this.SourceUri                  = source_uri;
     this.StoppedReason              = StopReason.None;
     this.Logger                     = new Logger(this.GetType(), source_uri.ToString());
     actionQueue                     = new ActionQueue();
     actionQueue.UnhandledException += ActionQueue_UnhandledException;
 }
        public BroadcastViewModel(PeerCast peerCast)
        {
            this.peerCast = peerCast;
              this.uiSettings = new UISettingsViewModel(PeerCastApplication.Current.Settings);
              start = new Command(OnBroadcast, () => CanBroadcast(StreamSource, ContentType, channelName));
              contentTypes = peerCast.ContentReaderFactories.ToArray();

              yellowPages = Enumerable.Repeat(new KeyValuePair<string,IYellowPageClient>("掲載なし", null),1)
            .Concat(peerCast.YellowPages.Select(yp => new KeyValuePair<string,IYellowPageClient>(yp.Name, yp)));
              if (contentTypes.Length > 0) contentType = contentTypes[0];

              this.SelectedSourceStream = SourceStreams.FirstOrDefault();
        }
 public SourceStreamBase(
     PeerCast peercast,
     Channel  channel,
     Uri      source_uri)
 {
     this.PeerCast  = peercast;
       this.Channel   = channel;
       this.SourceUri = source_uri;
       this.StoppedReason = StopReason.None;
       this.EventQueue = new EventQueue<SourceStreamEvent>();
       this.Logger = new Logger(this.GetType());
       ThreadPool.RegisterWaitForSingleObject(this.EventQueue.WaitHandle, OnEvent, null, Timeout.Infinite, true);
 }
Beispiel #33
0
 public AdminHostOutputStream(
     AdminHost owner,
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     AccessControlInfo access_control,
     HTTPRequest request)
     : base(peercast, input_stream, output_stream, remote_endpoint, access_control, null, null)
 {
     this.owner   = owner;
     this.request = request;
     Logger.Debug("Initialized: Remote {0}", remote_endpoint);
 }
Beispiel #34
0
 /// <summary>
 /// 指定したエンドポイントで接続待ち受けをするOutputListenerを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="ip">待ち受けをするエンドポイント</param>
 /// <param name="local_accepts">リンクローカルな接続先に許可する出力ストリームタイプ</param>
 /// <param name="global_accepts">リンクグローバルな接続先に許可する出力ストリームタイプ</param>
 internal OutputListener(
     PeerCast peercast,
     IPEndPoint ip,
     OutputStreamType local_accepts,
     OutputStreamType global_accepts)
 {
     this.PeerCast            = peercast;
     this.LocalOutputAccepts  = local_accepts;
     this.GlobalOutputAccepts = global_accepts;
     server = new TcpListener(ip);
     server.Start();
     listenerThread      = new Thread(ListenerThreadFunc);
     listenerThread.Name = String.Format("OutputListenerThread:{0}", ip);
     listenerThread.Start(server);
 }
Beispiel #35
0
 public LoopbackSourceConnection(
     PeerCast peercast,
     Channel channel,
     Uri source_uri,
     Channel source_channel)
 {
     PeerCast      = peercast;
     Channel       = channel;
     SourceUri     = source_uri;
     SourceChannel = source_channel;
     if (SourceChannel != null)
     {
         channelContentSink = new ChannelContentSink(Channel, true);
     }
 }
Beispiel #36
0
 public APIHostOutputStream(
     APIHost owner,
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     HTTPRequest request,
     byte[] header)
     : base(peercast, input_stream, output_stream, remote_endpoint, null, header)
 {
     this.owner   = owner;
     this.request = request;
     this.rpcHost = new JSONRPCHost(this);
     Logger.Debug("Initialized: Remote {0}", remote_endpoint);
 }
Beispiel #37
0
 /// <summary>
 /// 元になるストリーム、チャンネル、リクエストからHTTPOutputStreamを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCast</param>
 /// <param name="connection">元になるストリーム</param>
 /// <param name="access_control">接続可否および認証の情報</param>
 /// <param name="channel">所属するチャンネル。無い場合はnull</param>
 public OutputStreamBase(
     PeerCast peercast,
     ConnectionStream connection,
     AccessControlInfo access_control,
     Channel channel)
 {
     this.Logger                  = new Logger(this.GetType(), connection.RemoteEndPoint?.ToString() ?? "");
     this.Connection              = connection;
     this.Connection.ReadTimeout  = 10000;
     this.Connection.WriteTimeout = 10000;
     this.PeerCast                = peercast;
     this.AccessControlInfo       = access_control;
     this.Channel                 = channel;
     this.IsLocal                 = (RemoteEndPoint as IPEndPoint)?.Address?.IsSiteLocal() ?? true;
 }
Beispiel #38
0
 public SourceStreamBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast        = peercast;
     this.Channel         = channel;
     this.SourceUri       = source_uri;
     this.IsStopped       = false;
     this.RecvEvent       = new AutoResetEvent(false);
     this.mainThread      = new Thread(MainProc);
     this.mainThread.Name = this.GetType().Name;
     this.SyncContext     = new QueuedSynchronizationContext();
     this.Logger          = new Logger(this.GetType());
 }
 public SourceStreamBase(
     PeerCast peercast,
     Channel channel,
     Uri source_uri)
 {
     this.PeerCast = peercast;
       this.Channel = channel;
       this.SourceUri = source_uri;
       this.IsStopped = false;
       this.RecvEvent = new AutoResetEvent(false);
       this.mainThread = new Thread(MainProc);
       this.mainThread.Name = this.GetType().Name;
       this.SyncContext = new QueuedSynchronizationContext();
       this.Logger = new Logger(this.GetType());
 }
 /// <summary>
 /// 元になるストリーム、チャンネル、リクエストからHTTPOutputStreamを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCast</param>
 /// <param name="input_stream">元になる受信ストリーム</param>
 /// <param name="output_stream">元になる送信ストリーム</param>
 /// <param name="is_local">接続先がローカルネットワーク内かどうか</param>
 /// <param name="channel">所属するチャンネル。無い場合はnull</param>
 /// <param name="request">クライアントからのリクエスト</param>
 public HTTPOutputStream(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     Channel channel,
     HTTPRequest request)
     : base(peercast, input_stream, output_stream, remote_endpoint, channel, null)
 {
     Logger.Debug("Initialized: Channel {0}, Remote {1}, Request {2} {3}",
     channel!=null ? channel.ChannelID.ToString("N") : "(null)",
     remote_endpoint,
     request.Method,
     request.Uri);
       this.request = request;
 }
        internal ListenerEditViewModel(PeerCast peerCast)
        {
            Address = "IPv4 Any";
              Port = 7144;
              LocalRelay = true;
              LocalPlay = true;
              LocalInterface = true;
              GlobalRelay = true;
              GlobalAuthRequired = true;
              var key = AuthenticationKey.Generate();
              AuthId       = key.Id;
              AuthPassword = key.Password;
              RegenerateAuthKey = new Command(() => {
            key = AuthenticationKey.Generate();
            AuthId       = key.Id;
            AuthPassword = key.Password;
              });

              add = new Command(() =>
              {
            IPAddress address;
            try
            {
              address = ToIPAddress(Address);
            }
            catch (FormatException)
            {
              return;
            }
            var localAccepts = ToOutputStreamType(
              LocalRelay, LocalPlay, LocalInterface);
            var glocalAccepts = ToOutputStreamType(
              GlobalRelay, GlobalPlay, GlobalInterface);
            try
            {
              var listener = peerCast.StartListen(
            new IPEndPoint(address, Port), localAccepts, glocalAccepts);
              listener.LocalAuthorizationRequired = LocalAuthRequired;
              listener.GlobalAuthorizationRequired = GlobalAuthRequired;
              listener.AuthenticationKey = new AuthenticationKey(AuthId, AuthPassword);
            }
            catch (SocketException)
            {
            }
              });
        }
Beispiel #42
0
 /// <summary>
 /// 指定したエンドポイントで接続待ち受けをするOutputListenerを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="ip">待ち受けをするエンドポイント</param>
 /// <param name="local_accepts">リンクローカルな接続先に許可する出力ストリームタイプ</param>
 /// <param name="global_accepts">リンクグローバルな接続先に許可する出力ストリームタイプ</param>
 internal OutputListener(
     PeerCast peercast,
     IPEndPoint ip,
     OutputStreamType local_accepts,
     OutputStreamType global_accepts)
 {
     this.PeerCast                    = peercast;
     this.localOutputAccepts          = local_accepts;
     this.globalOutputAccepts         = global_accepts;
     this.LocalAuthorizationRequired  = false;
     this.GlobalAuthorizationRequired = true;
     this.AuthenticationKey           = AuthenticationKey.Generate();
     server = new TcpListener(ip);
     server.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
     server.Start();
     listenerThread      = new Thread(ListenerThreadFunc);
     listenerThread.Name = String.Format("OutputListenerThread:{0}", ip);
     listenerThread.Start(server);
 }
 /// <summary>
 /// 指定したエンドポイントで接続待ち受けをするOutputListenerを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="ip">待ち受けをするエンドポイント</param>
 /// <param name="local_accepts">リンクローカルな接続先に許可する出力ストリームタイプ</param>
 /// <param name="global_accepts">リンクグローバルな接続先に許可する出力ストリームタイプ</param>
 internal OutputListener(
     PeerCast peercast,
     IPEndPoint ip,
     OutputStreamType local_accepts,
     OutputStreamType global_accepts)
 {
     this.PeerCast = peercast;
       this.localOutputAccepts  = local_accepts;
       this.globalOutputAccepts = global_accepts;
       this.LocalAuthorizationRequired  = false;
       this.GlobalAuthorizationRequired = true;
       this.AuthenticationKey = AuthenticationKey.Generate();
       server = new TcpListener(ip);
       server.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
       server.Start();
       listenerThread = new Thread(ListenerThreadFunc);
       listenerThread.Name = String.Format("OutputListenerThread:{0}", ip);
       listenerThread.Start(server);
 }
 public PCPOutputStream(
     PeerCast peercast,
     Stream input_stream,
     Stream output_stream,
     EndPoint remote_endpoint,
     Channel channel,
     RelayRequest request)
     : base(peercast, input_stream, output_stream, remote_endpoint, channel, null)
 {
     Logger.Debug("Initialized: Channel {0}, Remote {1}, Request {2} {3} ({4} {5})",
     channel!=null ? channel.ChannelID.ToString("N") : "(null)",
     remote_endpoint,
     request.Uri,
     request.StreamPos,
     request.PCPVersion,
     request.UserAgent);
       this.Downhost = null;
       this.IsChannelFound = channel!=null && channel.Status==SourceStreamStatus.Receiving;
       this.IsRelayFull = channel!=null ? !channel.IsRelayable(this) : false;
       this.relayRequest = request;
 }
Beispiel #45
0
 public MainForm(PeerCastApplication app)
 {
   InitializeComponent();
   application = app;
   peerCast = app.PeerCast;
   if (PlatformID.Win32NT==Environment.OSVersion.Platform) {
     notifyIcon = new NotifyIcon(this.components);
     notifyIcon.Icon = this.Icon;
     notifyIcon.ContextMenuStrip = notifyIconMenu;
     notifyIcon.Visible = true;
     notifyIcon.DoubleClick += showGUIMenuItem_Click;
     notifyIcon.BalloonTipClicked += notifyIcon_BalloonTipClicked;
     versionChecker = new AppCastReader(
       new Uri(Settings.Default.UpdateURL, UriKind.Absolute),
       Settings.Default.CurrentVersion);
     versionChecker.NewVersionFound += versionChecker_Found;
     versionChecker.CheckVersion();
   }
   var settings = application.Settings.Get<GUISettings>();
   this.Visible = settings.ShowWindowOnStartup;
 }
 /// <summary>
 /// 元になるストリーム、チャンネル、リクエストからHTTPOutputStreamを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCast</param>
 /// <param name="input_stream">元になる受信ストリーム</param>
 /// <param name="output_stream">元になる送信ストリーム</param>
 /// <param name="remote_endpoint">接続先のアドレス</param>
 /// <param name="access_control">接続可否および認証の情報</param>
 /// <param name="channel">所属するチャンネル。無い場合はnull</param>
 /// <param name="request">クライアントからのリクエスト</param>
 public OutputStreamBase(
   PeerCast peercast,
   Stream input_stream,
   Stream output_stream,
   EndPoint remote_endpoint,
   AccessControlInfo access_control,
   Channel channel,
   byte[] header)
 {
   this.Logger = new Logger(this.GetType());
   this.connection = new ConnectionStream(
     header!=null && header.Length>0 ? new PrependedStream(header, input_stream) : input_stream,
     output_stream);
   this.connection.ReadTimeout = 10000;
   this.connection.WriteTimeout = 10000;
   this.PeerCast = peercast;
   this.RemoteEndPoint = remote_endpoint;
   this.AccessControlInfo = access_control;
   this.Channel = channel;
   var ip = remote_endpoint as IPEndPoint;
   this.IsLocal = ip!=null ? ip.Address.IsSiteLocal() : true;
 }
        /// <summary>
        /// 元になるストリーム、チャンネル、リクエストからHTTPOutputStreamを初期化します
        /// </summary>
        /// <param name="peercast">所属するPeerCast</param>
        /// <param name="input_stream">元になる受信ストリーム</param>
        /// <param name="output_stream">元になる送信ストリーム</param>
        /// <param name="remote_endpoint">接続先のアドレス</param>
        /// <param name="access_control">接続可否および認証の情報</param>
        /// <param name="channel">所属するチャンネル。無い場合はnull</param>
        /// <param name="request">クライアントからのリクエスト</param>
        public OutputStreamBase(
            PeerCast peercast,
            Stream input_stream,
            Stream output_stream,
            EndPoint remote_endpoint,
            AccessControlInfo access_control,
            Channel channel,
            byte[] header)
        {
            this.Logger     = new Logger(this.GetType(), remote_endpoint != null ? remote_endpoint.ToString() : "");
            this.connection = new ConnectionStream(
                header != null && header.Length > 0 ? new PrependedStream(header, input_stream) : input_stream,
                output_stream);
            this.connection.ReadTimeout  = 10000;
            this.connection.WriteTimeout = 10000;
            this.PeerCast          = peercast;
            this.RemoteEndPoint    = remote_endpoint;
            this.AccessControlInfo = access_control;
            this.Channel           = channel;
            var ip = remote_endpoint as IPEndPoint;

            this.IsLocal = ip != null?ip.Address.IsSiteLocal() : true;
        }
Beispiel #48
0
 public MainForm(PeerCast peercast)
 {
     InitializeComponent();
     Settings.Default.PropertyChanged += SettingsPropertyChanged;
     Logger.Level = LogLevel.Warn;
     Logger.AddWriter(new DebugWriter());
     guiWriter = new TextBoxWriter(logText);
     if (PlatformID.Win32NT == Environment.OSVersion.Platform)
     {
         notifyIcon                    = new NotifyIcon(this.components);
         notifyIcon.Icon               = this.Icon;
         notifyIcon.ContextMenuStrip   = notifyIconMenu;
         notifyIcon.Visible            = true;
         notifyIcon.DoubleClick       += showGUIMenuItem_Click;
         notifyIcon.BalloonTipClicked += notifyIcon_BalloonTipClicked;
         versionChecker                = new AppCastReader(
             new Uri(Settings.Default.UpdateURL, UriKind.Absolute),
             Settings.Default.CurrentVersion);
         versionChecker.NewVersionFound += versionChecker_Found;
         versionChecker.CheckVersion();
     }
     peerCast = peercast;
     peerCast.ChannelAdded     += ChannelAdded;
     peerCast.ChannelRemoved   += ChannelRemoved;
     logLevelList.SelectedIndex = Settings.Default.LogLevel;
     logToFileCheck.Checked     = Settings.Default.LogToFile;
     logFileNameText.Text       = Settings.Default.LogFileName;
     logToConsoleCheck.Checked  = Settings.Default.LogToConsole;
     logToGUICheck.Checked      = Settings.Default.LogToGUI;
     OnUpdateSettings(null);
     timer.Interval = 1000;
     timer.Enabled  = true;
     timer.Tick    += (sender, args) => {
         UpdateStatus();
     };
     UpdateStatus();
 }
Beispiel #49
0
 /// <summary>
 /// 指定したエンドポイントで接続待ち受けをするOutputListenerを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="ip">待ち受けをするエンドポイント</param>
 /// <param name="local_accepts">リンクローカルな接続先に許可する出力ストリームタイプ</param>
 /// <param name="global_accepts">リンクグローバルな接続先に許可する出力ストリームタイプ</param>
 internal OutputListener(
     PeerCast peercast,
     IConnectionHandler connection_handler,
     IPEndPoint ip,
     OutputStreamType local_accepts,
     OutputStreamType global_accepts)
 {
     this.PeerCast                  = peercast;
     this.localOutputAccepts        = local_accepts;
     this.globalOutputAccepts       = global_accepts;
     this.LoopbackAccessControlInfo = new AccessControlInfo(
         OutputStreamType.All,
         false,
         null);
     UpdateLocalAccessControlInfo();
     UpdateGlobalAccessControlInfo();
     this.ConnectionHandler = connection_handler;
     server = new TcpListener(ip);
     if (ip.AddressFamily == AddressFamily.InterNetworkV6)
     {
         server.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, true);
     }
     listenTask = StartListen(server, cancellationSource.Token);
 }
Beispiel #50
0
        public RelayChannel(PeerCast peercast, NetworkType network, Guid channel_id)

            : base(peercast, network, channel_id)
        {
        }
 public OutputStreamFactoryBase(PeerCast peercast)
 {
     this.PeerCast = peercast;
 }
Beispiel #52
0
 public AdminHostOutputStreamFactory(AdminHost owner, PeerCast peercast)
     : base(peercast)
 {
     this.owner = owner;
 }
Beispiel #53
0
 /// <summary>
 /// AccessControllerオブジェクトを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 public AccessController(PeerCast peercast)
 {
     this.PeerCast = peercast;
 }
Beispiel #54
0
 public LoopbackSourceStream(PeerCast peercast, Channel channel, Uri source_uri)
     : base(peercast, channel, source_uri)
 {
 }
Beispiel #55
0
 public ConnectionHandler(PeerCast peercast)
 {
     this.PeerCast = peercast;
 }
 public HTTPSourceStream(PeerCast peercast, Channel channel, Uri source_uri, IContentReader reader)
     : base(peercast, channel, source_uri)
 {
     this.ContentReader = reader;
 }
 public HTTPSourceStreamFactory(PeerCast peercast)
     : base(peercast)
 {
 }
 public SourceStreamFactoryBase(PeerCast peercast)
 {
     this.PeerCast = peercast;
 }
Beispiel #59
0
 /// <summary>
 /// チャンネルIDとソースストリームを指定してチャンネルを初期化します
 /// </summary>
 /// <param name="peercast">所属するPeerCastオブジェクト</param>
 /// <param name="channel_id">チャンネルID</param>
 /// <param name="source_uri">ソースURI</param>
 public Channel(PeerCast peercast, Guid channel_id, Uri source_uri)
     : this(peercast, channel_id, Guid.Empty, source_uri)
 {
 }
Beispiel #60
0
 public LoopbackSourceStreamFactory(PeerCast peercast)
     : base(peercast)
 {
 }