private void AddFavouriteRequest(MyWebRequest req) { int id = int.Parse(req.Parameters["id"].Split("#".ToCharArray(), 2)[0]); var res = new FavouriteAdd(id).Execute(_device.Proxy.SessionState.session, TypeResult.Xml); var resp = req.GetResponse(); resp.AddHeader(HttpHeader.ContentType, WebServer.GetMime(".json").ToString()); resp.AddHeader(HttpHeader.ContentLength, res.Length.ToString()); resp.SendHeaders(); res.CopyTo(resp.GetStream()); }
private void StopRequest(MyWebRequest req) { if (!req.Parameters.ContainsKey("id")) { _device.Web.Send404(req); return; } Stop(req.Parameters["id"]); req.GetResponse().SendText("OK"); }
public void SendResponse(MyWebRequest req) { string res; try { res = GetPlaylist(req); } catch (Exception ex) { res = ex.Message; } MyWebResponse resp = req.GetResponse(); resp.SendText(res); }
private void Request(MyWebRequest req) { if (!req.Headers.ContainsKey("id")) { _server.Send404(req); return; } TcpClient client = new TcpClient("127.0.0.1", AceStream31.WebASPort); var stream = client.GetStream(); Uri uri = new Uri(Acestream.Play(req.Headers["id"])); var sendreq = Encoding.UTF8.GetBytes(string.Format("GET {0}{1}\r\nHost: {2}:{3}\r\nConnection: Keep-Alive\r\n\r\n", uri.PathAndQuery, uri.Host, uri.Port)); stream.Write(sendreq, 0, sendreq.Length); var resp = req.GetResponse(); resp.AddHeader("Content-Type", "application/octet-stream"); resp.AddHeader("Cache-control", "no-cache"); resp.SendHeaders(); stream.CopyTo(resp.GetStream()); }
private void SendHead(MyWebRequest obj) { var info = _device.UpnpSettings.Profile.VoD.Info.FirstOrDefault(i => i.FileExt.Equals(".ts", StringComparison.OrdinalIgnoreCase)) ?? _device.UpnpSettings.Profile.VoD.Info[0]; var resp = obj.GetResponse(); resp.AddHeader(HttpHeader.ContentType, WebServer.GetMime(".ts").ToString()); if (_device.UpnpSettings.Profile.Live.SendContentLength) resp.AddHeader(HttpHeader.ContentLength, "50000000000"); resp.AddHeader(HttpHeader.AcceptRanges, "none"); resp.AddHeader(HttpHeader.Date, DateTime.Now.ToString("r")); resp.AddHeader(HttpHeader.Server, String.Format("{0}/{1}.{2} UPnP/1.1 TestDlna/{3}", Environment.OSVersion.Platform, Environment.OSVersion.Version.Major, Environment.OSVersion.Version.Minor, _device.ModelNumber)); resp.AddHeader("Cache-control", "no-cache"); resp.AddHeader("contentFeatures.dlna.org", info.DlnaType + info.Feature); resp.AddHeader("transferMode.dlna.org", "Streaming"); resp.AddHeader("realTimeInfo.dlna.org", "DLNA.ORG_TLAG=*"); resp.SendHeaders(); }
private void GetChannelsRequest(MyWebRequest req) { var resp = req.GetResponse(); resp.AddHeader(HttpHeader.ContentType, WebServer.GetMime(".xml").ToString()); var res = new ArcList().Execute(_device.Proxy.SessionState.session, TypeResult.Xml); XDocument xd = XDocument.Load(res); var xchs = xd.Root.Element("channels").Elements().ToArray(); foreach (var xch in xchs) { if (_device.Filter.Check("ttv").Find("ch" + xch.Attribute("id").Value).Check()) xch.Remove(); } MemoryStream ms = new MemoryStream(); xd.Save(ms); ms.Position = 0; resp.AddHeader(HttpHeader.ContentLength, ms.Length.ToString()); resp.SendHeaders(); ms.CopyTo(resp.GetStream()); }
private void AddRequest(MyWebRequest req) { if (!req.Parameters.ContainsKey("channel_id")) { _device.Web.Send404(req); return; } Channel ch = _device.ChannelsProvider.GetChannels().FirstOrDefault(channel => channel.id == int.Parse(req.Parameters["channel_id"])); if (ch == null) { _device.Web.Send404(req); return; } DateTime start = !req.Parameters.ContainsKey("start") ? DateTime.Now : ParseDateTime(req.Parameters["start"]); DateTime end = !req.Parameters.ContainsKey("end") ? DateTime.Today.AddDays(1).AddTicks(-1) : ParseDateTime(req.Parameters["end"]); Add(ch, start, end, req.Parameters.ContainsKey("name") ? req.Parameters["name"] : string.Empty); req.GetResponse().SendText("OK"); }
private void SendFile(string url, MyWebRequest req, string ext) { var info = _device.UpnpSettings.Profile.Live.Info.FirstOrDefault(i => i.FileExt.Equals(ext, StringComparison.OrdinalIgnoreCase)) ?? _device.UpnpSettings.Profile.Live.Info[0]; var resp = req.GetResponse(); var mime = WebServer.GetMime(ext) ?? WebServer.GetMime(".ts"); resp.AddHeader(HttpHeader.ContentType, mime.ToString()); resp.AddHeader("Cache-control", "no-cache"); resp.AddHeader("contentFeatures.dlna.org", info.DlnaType + info.Feature); resp.AddHeader("transferMode.dlna.org", "Streaming"); resp.AddHeader("realTimeInfo.dlna.org", "DLNA.ORG_TLAG=*"); resp.SendFile(url); }
public override void Play(MyWebRequest req) { if (!req.Parameters.ContainsKey("id")) return; var plugpath = GetPluginFromPath(req.Url); var plugin = _plugins.FirstOrDefault(p => plugpath == p.Id); if (plugin != null) { var content = plugin.GetContent(req.Parameters); if (content == null || content is IPluginContainer) return; var source = content.GetSourceUrl(); if (source.Type == SourceType.ContentId || source.Type == SourceType.Torrent) { var ts = GetContentUrl(source, req); string url = ts.GetPlayTask().Result; if (ts == null || string.IsNullOrEmpty(url)) { ts.Disconnect(); req.GetResponse().SendText("File Not Found"); return; } TorrentStream ts1 = new TorrentStream(req.Client); ts1.Connect(); var resp = ts1.ReadTorrent(source.Url, (TTVApi.SourceType) (byte) source.Type); string file = resp.Files[req.Parameters.ContainsKey("index") ? int.Parse(req.Parameters["index"]) : 0]; string ext = Path.GetExtension(file); ts1.Disconnect(); if (content.Translation == TranslationType.Broadcast) SendBroadcast(url, req, ext); else if (content.Translation == TranslationType.VoD) { for (int i = 0; i < ts.Owner.Count && ts.Owner.Count > 1; i++) ts.Owner[i].Close(); SendFile(url, req, ext); } Thread.Sleep(5712); if (ts.Owner.All(c => !c.Connected)) { if (content.Translation == TranslationType.Broadcast && !_device.Proxy.Broadcaster.Contains(url) || content.Translation == TranslationType.VoD) { ts.Disconnect(); _device.Proxy.RemoveFromTsPoos(ts); } } } else if (source.Type == SourceType.File) { string ext = Path.GetExtension(source.Url); if (content.Translation == TranslationType.Broadcast) SendBroadcast(source.Url, req, ext); else if (content.Translation == TranslationType.VoD) SendFile(source.Url, req, ext); } } }
private void IsValidated(MyWebRequest request, [UpnpServiceArgument("A_ARG_TYPE_DeviceID")][AliasAttribute("DeviceID")] string DeviceID) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("1"); }
private void GetCurrentConnectionInfo(MyWebRequest request, [AliasAttribute("ConnectionID")][UpnpServiceArgument("A_ARG_TYPE_ConnectionID")] string ConnectionID) { if (ConnectionID != "0") throw new SoapException(402, "Invalid Args"); MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("-1", "-1", string.Empty, string.Empty, "-1", "Output", "OK"); }
private void GetProtocolInfo(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody(sourceProtocolInfo, string.Empty); }
private void HttpRequest(MyWebRequest req) { string[] url = req.Url.Split("/".ToCharArray(), 2, StringSplitOptions.RemoveEmptyEntries); var plugin = _plugins.FirstOrDefault(proxy => proxy.Id == url[0]); if (plugin == null) { _device.Web.Send404(req); return; } var res = plugin.HttpRequest(url[1], req.Parameters); var resp = req.GetResponse(); foreach (var header in res.Headers) resp.AddHeader(header.Key, header.Value); resp.SendHeaders(res.ResultState); res.GetStream().CopyTo(resp.GetStream()); }
private void GetSearchCapabilities(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody(""); }
private void X_GetFeatureList(MyWebRequest request) { StringBuilder sb = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(sb, new XmlWriterSettings() { OmitXmlDeclaration = true })) { writer.WriteStartElement("Features", "urn:schemas-upnp-org:av:avs"); writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance"); writer.WriteAttributeString("xsi", "schemaLocation", null, "urn:schemas-upnp-org:av:avs http://www.upnp.org/schemas/av/avs.xsd"); writer.WriteStartElement("Feature"); writer.WriteAttributeString("name", "samsung.com_BASICVIEW"); writer.WriteAttributeString("version", "1"); writer.WriteStartElement("container"); writer.WriteAttributeString("id", "0"); writer.WriteAttributeString("type", "object.item.videoItem"); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); } MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody(sb.ToString()); }
private void SendDescription(MyWebRequest req) { var resp = req.GetResponse(); resp.AddHeader(HttpHeader.ContentLength, descArray.Length.ToString()); resp.AddHeader(HttpHeader.ContentType, "text/xml; charset=\"utf-8\""); resp.SendHeaders(); var stream = new MemoryStream(descArray); stream.CopyTo(resp.GetStream()); }
private void AllRequest(MyWebRequest obj) { obj.GetResponse().SendText(GetXml(_device.Records.GetRecords()).ToString()); }
public override void Play(MyWebRequest req) { string id = req.Parameters["id"].Split("#".ToCharArray(), 2)[0]; Records rec = _device.Records[id]; req.GetResponse().SendFile(rec.Path.LocalPath); }
private void SendBroadcast(string url, MyWebRequest req, string ext) { var broadcast = _device.Proxy.Broadcaster.GetStream(url, req.Parameters, req.Client); try { SendHeaders(req, ext); broadcast.CopyTo(req.GetResponse().GetStream()); } finally { broadcast.Close(); } //string broadcast = _device.Proxy.FindBroadcastUrl(url); //if (string.IsNullOrEmpty(broadcast)) // broadcast = _device.Proxy.StartBroadcastStream(url, req.Parameters.ContainsKey("transcode") ? req.Parameters["transcode"] : ""); //_device.Proxy.AddVlcBroadcastClient(broadcast, req.Client); //req.GetResponse().SendBroadcast(broadcast, request => SendHeaders(request, ext)); //_device.Proxy.StopBroadcast(broadcast, url); }
private void GetSortCapabilities(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("dc:title,dc:date"); }
private void SendHeaders(MyWebRequest req, string ext) { var info = _device.UpnpSettings.Profile.Live.Info.FirstOrDefault(i => i.FileExt.Equals(ext, StringComparison.OrdinalIgnoreCase)) ?? _device.UpnpSettings.Profile.Live.Info[0]; var resp = req.GetResponse(); resp.AddHeader(HttpHeader.ContentType, WebServer.GetMime(".ts").ToString()); if (!resp.HeaderContains(HttpHeader.ContentLength) && _device.UpnpSettings.Profile.Live.SendContentLength) resp.AddHeader(HttpHeader.ContentLength, "2500000000"); if (!resp.HeaderContains(HttpHeader.AcceptRanges)) resp.AddHeader(HttpHeader.AcceptRanges, "none"); resp.AddHeader("Cache-control", "no-cache"); resp.AddHeader("contentFeatures.dlna.org", info.DlnaType + info.Feature); resp.AddHeader("transferMode.dlna.org", "Streaming"); resp.AddHeader("realTimeInfo.dlna.org", "DLNA.ORG_TLAG=*"); resp.SendHeaders(); }
private void GetSystemUpdateID(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("0"); }
private void ProceedEventUnsub(MyWebRequest req) { req.GetResponse().SendHeaders(); }
private void GetDescription(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.AddHeader(HttpHeader.ContentLength, this.descArray.Length.ToString()); response.AddHeader(HttpHeader.ContentType, "text/xml; charset=\"utf-8\""); using (MemoryStream stream = new MemoryStream(this.descArray)) { response.SendHeaders(); stream.CopyTo(response.GetStream()); } }
private void GetCurrentConnectionIDs(MyWebRequest request) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("0"); }
//private void NewPlay(MyWebRequest req, TranslationStream url) //{ // string cid = url.Source; // if (url.Type != SourceType.ContentId) // { // TorrentStream ts1 = new TorrentStream(req.Client); // ts1.Connect(); // var respData = ts1.ReadTorrent(url.Source, url.Type); // cid = ts1.GetContentId(respData); // } // var stream = _device.Proxy.GetStreamFromCID(cid, req.Parameters); // var resp = req.GetResponse(); // //resp.AddHeader("Transfer-Encoding", "chunked"); // //resp.AddHeader("Content-Type", "video/mp2t"); // //resp.SendHeaders(); // //req.GetResponse().AddHeader("Transfer-Encoding", "chunked"); // SendHead(req); // try // { // stream.CopyTo(req.GetResponse().GetStream()); // } // catch // { // stream.Close(); // } //} public override void Play(MyWebRequest req) { int id = int.Parse(req.Parameters["id"].Split("#".ToCharArray(), 2)[0]); if (_device.Proxy.SessionState == null) throw new Exception("Необходима авторизация"); var url = new TranslationStream(id).Run(_device.Proxy.SessionState.session); if (!url.IsSuccess) { if (url.Error == ApiError.incorrect) { while (!_device.Proxy.Login() && _device.Proxy.SessionState.Error == ApiError.noconnect) { P2pProxyApp.Log.Write("Попыдка авторизации", TypeMessage.Info); } if (!_device.Proxy.SessionState.IsSuccess) throw new Exception("No authorized"); Play(req); return; } throw new Exception(url.error.ToString()); } var ts = _device.Proxy.GetTsClient(url.Source); Task<string> waiter; if (ts == null) { if (!req.Client.Connected) return; ts = new TorrentStream(req.Client); ts.Connect(); waiter = ts.Play(url.Source, url.Type); if (waiter != null) _device.Proxy.AddToTsPool(ts); } else { waiter = ts.GetPlayTask(); ts.Owner.Add(req.Client); } if (waiter != null && !waiter.IsCompleted) waiter.Wait(); else if (waiter == null) throw new FileNotFoundException(); if (string.IsNullOrEmpty(waiter.Result)) { _device.Proxy.RemoveFromTsPoos(ts); req.GetResponse().SendText("AceStream TimeOut"); return; } string aceurl = waiter.Result; string file = string.Empty; try { Uri aceuri = new Uri(aceurl); var broadcast = _device.Proxy.Broadcaster.GetStream(aceurl, req.Parameters, req.Client); //file = _device.Proxy.FindBroadcastUrl(aceurl); //if (string.IsNullOrEmpty(file)) // file = _device.Proxy.StartBroadcastStream(aceurl, // req.Parameters.ContainsKey("transcode") ? req.Parameters["transcode"] : ""); //_device.Proxy.AddVlcBroadcastClient(file, req.Client); SendHead(req); try { broadcast.CopyTo(req.GetResponse().GetStream()); //req.GetResponse().SendBroadcast(file); } catch { } finally { broadcast.Close(); req.Client.Close(); //if (req.Client.Connected) // req.Client.Close(); if (!_device.Proxy.Broadcaster.Contains(aceurl)) { ts.Disconnect(); _device.Proxy.RemoveFromTsPoos(ts); } } //if (_device.UpnpSettings.Profile.Live.SendHead) // req.GetResponse().SendBroadcast(file, SendHead); //else // req.GetResponse().SendBroadcast(file); //if (_device.Proxy.StopBroadcast(file, aceurl)) //{ // ts.Disconnect(); // _device.Proxy.RemoveFromTsPoos(ts); //} } catch (Exception ex) { P2pProxyApp.Log.Write(ex.Message, TypeMessage.Error); ts.Disconnect(); _device.Proxy.RemoveFromTsPoos(ts); _device.Proxy.Broadcaster.StopBroadcast(aceurl); } }
//private void PlayNew(MyWebRequest req, ArcStream url) //{ // string cid = url.source; // if (url.Type != SourceType.ContentId) // { // TorrentStream ts1 = new TorrentStream(req.Client); // ts1.Connect(); // var respData = ts1.ReadTorrent(url.source, url.Type); // cid = ts1.GetContentId(respData); // } // var stream = _device.Proxy.Broadcaster.GetSource(cid); // req.GetResponse().SendFile(stream); //} public override void Play(MyWebRequest req) { locker.isSet = true; int id = int.Parse(req.Parameters["id"].Split("#".ToCharArray(), 2)[0]); var url = new ArcStream(id).Run(_device.Proxy.SessionState.session); if (!url.IsSuccess) { while (!_device.Proxy.Login() && _device.Proxy.SessionState.Error == ApiError.noconnect) { } if (!_device.Proxy.SessionState.IsSuccess) throw new Exception("No authorized"); Play(req); return; } var ts = _device.Proxy.GetTsClient(url.source); Task<string> waiter; try { if (ts == null) { if (!req.Client.Connected) return; ts = new TorrentStream(req.Client); ts.Connect(); waiter = ts.Play(url.source, url.Type); if (waiter != null) _device.Proxy.AddToTsPool(ts); } else { waiter = ts.GetPlayTask(); ts.Owner[0].Close(); ts.Owner.Add(req.Client); ts.Owner.RemoveAt(0); } locker.isSet = false; if (waiter != null && !waiter.IsCompleted) waiter.Wait(); else if (waiter == null) throw new FileNotFoundException(); if (string.IsNullOrEmpty(waiter.Result)) { _device.Proxy.RemoveFromTsPoos(ts); } while (plaing) Thread.Sleep(256); plaing = true; req.GetResponse().SendFile(waiter.Result); plaing = false; do Thread.Sleep(512); while (locker.isSet); if (ts.Owner.All(c => !c.Connected)) { ts.Disconnect(); _device.Proxy.RemoveFromTsPoos(ts); //GC.Collect(); } } catch (Exception ex) { P2pProxyApp.Log.Write(ex.Message, TypeMessage.Error); ts.Disconnect(); _device.Proxy.RemoveFromTsPoos(ts); plaing = false; } }
private void ProceedEventSub(MyWebRequest req) { uint timeout = uint.Parse(req.Headers["TIMEOUT"].Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries).Last()); string sid; if (req.Headers.ContainsKey("SID")) { sid = req.Headers["SID"]; } else { sid = "uuid:" + Guid.NewGuid(); string callback = req.Headers["CALLBACK"]; int startIdx = callback.IndexOf('<') + 1; int endIdx = callback.IndexOf('>', startIdx); Uri uri = new Uri(callback.Substring(startIdx, endIdx - startIdx)); new SendEventDel(SendEvent).BeginInvoke(sid, uri, null, null); } var resp = req.GetResponse(); resp.AddHeader(HttpHeader.ContentLength, "0"); resp.AddHeader("SID", sid); resp.AddHeader("TIMEOUT", "Second-" + timeout); resp.SendHeaders(); }
private void Browse(MyWebRequest request, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_ObjectID")][AliasAttribute("ObjectID")] string ObjectID, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_BrowseFlag")][AliasAttribute("BrowseFlag")] string BrowseFlag, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_Filter")][AliasAttribute("Filter")] string Filter, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_Index")][AliasAttribute("StartingIndex")] string StartingIndex, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_Count")][AliasAttribute("RequestedCount")] string RequestedCount, [ObfuscationAttribute][UpnpServiceArgument("A_ARG_TYPE_SortCriteria")] [AliasAttribute("SortCriteria")] string SortCriteria) { string Result = "", NumberReturned = "", TotalMatches = ""; uint startingIndex, requestedCount; BrowseFlag browseFlag; if (!uint.TryParse(StartingIndex, out startingIndex) || !uint.TryParse(RequestedCount, out requestedCount) || !Enum.TryParse(BrowseFlag, true, out browseFlag)) { if (P2pProxyApp.Debug) { Console.WriteLine("Invalid Args"); } throw new SoapException(402, "Invalid Args"); } SortCriteria = (SortCriteria == string.Empty) ? "+dc:title" : SortCriteria; try { this.device.ItemManager.Browse(request.Headers, ObjectID, browseFlag, Filter, startingIndex, requestedCount, SortCriteria, out Result, out NumberReturned, out TotalMatches); } catch (Exception ex) { P2pProxyApp.Log.Write(string.Format("Content::Browse({0}) - {1}", ObjectID, ex.Message), TypeMessage.Error); return; } MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody(Result, NumberReturned, TotalMatches, "0"); }
private void RegisterDevice(MyWebRequest request, [UpnpServiceArgument("A_ARG_TYPE_RegistrationReqMsg")][AliasAttribute("RegistrationReqMsg")] string RegistrationReqMsg) { MyWebResponse response = request.GetResponse(); response.SendSoapHeadersBody("OK"); }