Example #1
0
        public P2pProxyDevice(WebServer webServer, P2pProxyApp proxy) : base(webServer)
        {

            udn = Guid.NewGuid();
            friendlyName = "P2pProxy DLNA (" + Environment.MachineName + ")";
            deviceType = "urn:schemas-upnp-org:device:MediaServer:1";
            manufacturer = "BeGoodSoft";
            modelName = "P2pProxy DLNA Server";
            modelNumber = P2pProxyApp.Version;
            serialNumber = udn.ToString();
            modelUrl = "*****@*****.**";

            
            Web.AddRouteUrl("/login", LoginRequest, HttpMethod.Get);
            Web.AddRouteUrl("/stat", StatRequest, HttpMethod.Get);
            Web.AddRouteUrl("/clear_broadcast", ClearBroadcast, HttpMethod.Get);

            if (P2pProxyApp.MySettings.GetSetting("dlna", "enable", true))
            {
                Web.AddRouteUrl("/dlna/description.xml", SendDescription, HttpMethod.Get);
                Web.AddRouteUrl("/dlna/logo48.png", SendFile, HttpMethod.Get);
                services.Add(new ConnectionManagerService(server, this));
                services.Add(new ContentDirectoryService(server, this));
                services.Add(new MediaReceiverRegistrarService(server, this));
            }
            
            Proxy = proxy;
            Filter = new ContentFilter("root");
        }
 public ArchiveContentProvider(WebServer server, P2pProxyDevice device)
 {
     server.AddRouteUrl("/archive/", SendResponse, HttpMethod.Get);
     server.AddRouteUrl("/archive/play", Play, HttpMethod.Get);
     server.AddRouteUrl("/archive/play", SendHead, HttpMethod.Head);
     server.AddRouteUrl("/archive/channels", GetChannelsRequest, HttpMethod.Get);
     _device = device;
     
 }
 public ChannelContentProvider(WebServer server, P2pProxyDevice device)
 {
     server.AddRouteUrl(PLAYLIST_PATH, SendResponse, HttpMethod.Get);
     server.AddRouteUrl(PLAY_PATH, Play, HttpMethod.Get);
     server.AddRouteUrl(PLAY_PATH, SendHead, HttpMethod.Head);
     server.AddRouteUrl(FAVOURITE_ADD, AddFavouriteRequest, HttpMethod.Get);
     server.AddRouteUrl(FAVOURITE_DEL, DelFavouriteRequest, HttpMethod.Get);
     _device = device;
     
 }
 public RecordContentProvider(WebServer server, P2pProxyDevice device)
 {
     server.AddRouteUrl(PLAYLIST_PATH, SendResponse, HttpMethod.Get);
     server.AddRouteUrl(ADD_PATH, AddRequest, HttpMethod.Get);
     server.AddRouteUrl(DEL_PATH, DelRequest, HttpMethod.Get);
     server.AddRouteUrl(STOP_PATH, StopRequest, HttpMethod.Get);
     server.AddRouteUrl(API_PATH, AllRequest, HttpMethod.Get);
     server.AddRouteUrl(PLAY_PATH, Play, HttpMethod.Get);
     _device = device;
 }
Example #5
0
 protected Broadcaster(WebServer server)
 {
     broadcaser = new InternalBroadcaster(server);
 }
Example #6
0
 public VlcBroadcaster(WebServer server) : base(server)
 {
     LoadSettings();
 }
Example #7
0
 public InternalBroadcaster(WebServer server)
 {
     _server = server;
     Acestream = new AceStream31();
 }
Example #8
0
 protected UpnpDevice(WebServer web)
 {
     server = new UpnpServer(this);
     Web = web;
 }
Example #9
0
        public void Start()
        {
            if (AlwaysRunning())
            {
                OnNotifyed("Программа уже запущена", TypeMessage.Critical);
                Thread.Sleep(4);
                Process.GetCurrentProcess().Close();
                Process.GetCurrentProcess().Kill();
                IsWorking = false;
                return;
            }
            Log.Write("Start P2pProxy", TypeMessage.Info);
            var port = MySettings.GetSetting("web", "port", 8081);

            Log.Write("[P2pProxy] Запуск Веб-сервера", TypeMessage.Info);
            try
            {
                _web = new WebServer(Convert.ToUInt16(port));
                _web.AddRouteUrl("/help", HelpRequest, HttpMethod.Get);
                _web.Start();
                IsWorking = true;
            }
            catch
            {
                IsWorking = false;
                OnNotifyed("Порт закрыт. Дальнейшая работа программы не возможна", TypeMessage.Critical);
            }

            Device = new P2pProxyDevice(_web, this);
            Device.Start();
            Login();
                
            try
            {
                Broadcaster = new VlcBroadcaster(_web);
            }
            catch (Exception)
            {

                OnNotifyed("Не удалось запустить VLC-сервер. Дальнейшая работа программы не возможна", TypeMessage.Error);
                IsWorking = false;
                return;
            }

        }
Example #10
0
        public void SendFile(string url)
        {
            Uri       uri    = new Uri(url, UriKind.Absolute);
            TcpClient client = null;

            if (!uri.Scheme.Equals("file", StringComparison.OrdinalIgnoreCase))
            {
                client = GetStreamFromWeb(url);
                Stream stream = client.GetStream();
                try
                {
                    StreamReader sr    = new StreamReader(stream, Encoding.ASCII);
                    var          first = sr.ReadLine();
                    if (!first.Contains("200") && !first.Contains("206"))
                    {
                        sr.Close();
                        throw new Exception(first);
                    }
                    while (true)
                    {
                        var linehead = sr.ReadLine();
                        if (string.IsNullOrEmpty(linehead))
                        {
                            break;
                        }

                        var head  = linehead.Split(":".ToCharArray(), 2, StringSplitOptions.None);
                        var key   = head[0].Trim();
                        var value = (string.IsNullOrEmpty(head[1]) ? "" : head[1].Trim());
                        if (key.Equals("Server", StringComparison.OrdinalIgnoreCase))
                        {
                            continue;
                        }
                        AddHeader(key, value);
                    }
                    if (_headers.ContainsKey("Content-Length") && _request.Headers.ContainsKey("Range"))
                    {
                        Console.WriteLine(_headers["Content-Range"]);
                    }
                    this.SendHeaders();
                    long count = 0;
                    while (true)
                    {
                        byte[] buffer = new byte[WebServer.BUFFER_SIZE];
                        int    b      = stream.Read(buffer, 0, buffer.Length);
                        string test   = Encoding.ASCII.GetString(buffer, 0, b);
                        _stream.Write(buffer, 0, b);
                        count += b;
                        if (_headers.ContainsKey("Content-Length") && count >= long.Parse(_headers["Content-Length"]))
                        {
                            break;
                        }
                    }
                }
                catch (IOException e)
                {
                    client.GetStream().Close();
                    if (e.InnerException is SocketException)
                    {
                        if ((e.InnerException as SocketException).ErrorCode == 10060)
                        {
                            client.GetStream().Dispose();
                        }
                    }
                    client.Close();

                    Console.WriteLine(e.Message);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error. " + e.Message);
                }
                finally {
                    Console.WriteLine("End stream.");
                    if (client != null)
                    {
                        client.Close();
                    }
                }
            }
            else
            {
                AddHeader(HttpHeader.AcceptRanges, "bytes");
                AddHeader(HttpHeader.ContentType, WebServer.GetMime(Path.GetExtension(url)).ToString());
                var stream = File.OpenRead(url);
                if (_request.Headers.ContainsKey("Range") && !string.IsNullOrEmpty(_request.Headers["Range"]) &&
                    stream.CanSeek && stream.Length > 0)
                {
                    var  range  = Range.Parse(_request.Headers["Range"])[0];
                    long length = 0;
                    if (range.IsFirst || range.IsCenter)
                    {
                        stream.Position = range.From.Value;
                        if (range.IsCenter)
                        {
                            length = range.To.Value - range.From.Value + 1;
                        }
                        else
                        {
                            length = stream.Length - stream.Position;
                        }
                    }
                    else if (range.IsLast)
                    {
                        stream.Position = stream.Length - range.To.Value;
                        length          = range.To.Value;
                    }
                    AddHeader("transferMode.dlna.org", "Streaming");
                    AddHeader("File-Size", stream.Length.ToString());
                    AddHeader("Content-Range",
                              string.Format("{0} {1}-{2}/{3}", range.Unit, stream.Position, stream.Position + length - 1,
                                            stream.Length));
                    AddHeader(HttpHeader.ContentLength, length.ToString());
                    SendHeaders();
                    stream.CopyTo(_stream);
                }
                else
                {
                    AddHeader(HttpHeader.ContentLength, stream.Length.ToString());
                    SendHeaders();
                    stream.CopyTo(_stream);
                }
            }
        }