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; }
protected Broadcaster(WebServer server) { broadcaser = new InternalBroadcaster(server); }
public VlcBroadcaster(WebServer server) : base(server) { LoadSettings(); }
public InternalBroadcaster(WebServer server) { _server = server; Acestream = new AceStream31(); }
protected UpnpDevice(WebServer web) { server = new UpnpServer(this); Web = web; }
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; } }
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); } } }