Пример #1
0
        private static async Task OnViewXML(OwinEnvironment ctx, CancellationToken cancel_token)
        {
            var data = BuildViewXml(ctx.GetPeerCast());

            ctx.Response.StatusCode    = HttpStatusCode.OK;
            ctx.Response.ContentType   = "text/xml;charset=utf-8";
            ctx.Response.ContentLength = data.LongLength;
            await ctx.Response.WriteAsync(data, cancel_token).ConfigureAwait(false);
        }
Пример #2
0
 private static async Task<Channel> GetChannelAsync(OwinEnvironment ctx, ParsedRequest req, CancellationToken ct)
 {
   var tip = ctx.Request.Query.Get("tip");
   var channel = ctx.GetPeerCast().RequestChannel(req.ChannelId, OutputStreamBase.CreateTrackerUri(req.ChannelId, tip), true);
   if (channel==null) {
     return null;
   }
   using (var cts=CancellationTokenSource.CreateLinkedTokenSource(ct)) {
     cts.CancelAfter(10000);
     await channel.WaitForReadyContentTypeAsync(cts.Token).ConfigureAwait(false);
   }
   return channel;
 }
Пример #3
0
        private static async Task InvokeIndexTXT(OwinEnvironment ctx)
        {
            var cancel_token = ctx.Request.CallCancelled;

            ctx.Response.ContentType = "text/plain;charset=utf-8";
            var acinfo = ctx.GetAccessControlInfo();

            if (acinfo?.AuthenticationKey != null)
            {
                ctx.Response.Headers.Add("Set-Cookie", $"auth={acinfo.AuthenticationKey.GetToken()}; Path=/");
            }
            var peercast = ctx.GetPeerCast();
            var indextxt = String.Join("\r\n", peercast.Channels.Select(c => BuildIndexTXTEntry(peercast, c)));
            await ctx.Response.WriteAsync(indextxt, cancel_token).ConfigureAwait(false);
        }
Пример #4
0
        private static async Task OnStop(OwinEnvironment ctx, CancellationToken cancel_token)
        {
            var peercast = ctx.GetPeerCast();
            var channel  = FindChannelFromQuery(ctx);

            if (channel != null)
            {
                peercast.CloseChannel(channel);
                ctx.Response.StatusCode = HttpStatusCode.OK;
                await ctx.Response.WriteAsync("OK", cancel_token).ConfigureAwait(false);
            }
            else
            {
                ctx.Response.StatusCode = HttpStatusCode.NotFound;
                await ctx.Response.WriteAsync("Channel NotFound", cancel_token).ConfigureAwait(false);
            }
        }
Пример #5
0
        private static Channel FindChannelFromQuery(OwinEnvironment ctx)
        {
            var peercast = ctx.GetPeerCast();
            var idstr    = ctx.Request.Query.Get("id");

            if (peercast != null && idstr != null)
            {
                var md         = System.Text.RegularExpressions.Regex.Match(idstr, @"([A-Fa-f0-9]{32})(\.\S+)?");
                var channel_id = Guid.Empty;
                if (md.Success)
                {
                    try {
                        channel_id = new Guid(md.Groups[1].Value);
                    }
                    catch (Exception) {
                    }
                }
                return(peercast.Channels.FirstOrDefault(c => c.ChannelID == channel_id));
            }
            else
            {
                return(null);
            }
        }