Exemple #1
0
        /// <summary>
        /// Start HttpServer
        /// </summary>
        public void StartProxy()
        {
            HttpListener listener = new HttpListener();

            listener.Prefixes.Add(uri);
            listener.Start();
            ServerStartStatus.ProxyServerStarted = true;

            while (!isstop)
            {
                Debug2.WriteLine("<<<Proxy Listening at " + AcPlayConfiguration.Config.ProxyServerPort.ToString() + ">>>");
                HttpListenerContext context = listener.GetContext();
                ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptConnect), context);
            }
        }
Exemple #2
0
        private void AcceptConnect(object obj)
        {
            string ID = "[" + new Random().Next(1000, 1999).ToString() + "] ";

            try
            {
                HttpListenerContext context = (HttpListenerContext)obj;

                string requestString = context.Request.RawUrl;
                Debug2.WriteLine(ID + "Got request for " + requestString);

                var result = redirector.Redirect(context);

                if (result.RequestHandled)
                {
                    return;
                }

                //get response
                HttpWebRequest request = null;
                if (result.HandledRequest == null)
                {
                    request = (HttpWebRequest)WebRequest.Create(context.Request.RawUrl);
                    foreach (string key in context.Request.Headers.Keys)
                    {
                        try
                        {
                            if (new List <string>
                            {
                                "host",
                                "content-length",
                                "expires",
                                "cache-control",
                                "last-modified",
                                "if-modified-since",
                                "etag",
                                "if-none-match"
                            }.Contains(key.ToLower()))
                            {
                                continue;                                 //Disable cache
                            }
                            request.Headers.Add(key, context.Request.Headers[key]);
                        }
                        catch { }
                    }
                }
                else
                {
                    request = result.HandledRequest;
                }

                request.Proxy     = AcPlayConfiguration.Config.WebProxy;
                request.KeepAlive = false;

                Debug2.WriteLine(ID + "Got back response from " + request.RequestUri);


                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    foreach (string key in response.Headers)
                    {
                        try
                        {
                            context.Response.AppendHeader(key, response.Headers[key]);
                        }
                        catch { }
                    }
                    using (Stream receiveStream = response.GetResponseStream())
                    {
                        HttpListenerResponse responseOut = context.Response;

                        // Need to get the length of the response before it can be forwarded on
                        //responseOut.ContentLength64 = response.ContentLength;
                        int bytesCopied = CopyStream(receiveStream, responseOut.OutputStream);
                        responseOut.OutputStream.Close();
                        Debug2.WriteLine(ID + "Copied " + bytesCopied.ToString() + " bytes");
                    }
                }
            }
            catch (WebException e)
            {
                Debug2.WriteLine(ID + "\nWeb Exception raised!");
                Debug2.WriteLine(ID + "Message: " + e.Message);
                Debug2.WriteLine(ID + "Status: " + e.Status.ToString() + "\r\n");
            }
            catch (Exception e)
            {
                Debug2.WriteLine(ID + "\nMain Exception raised!");
                Debug2.WriteLine(ID + "Source : " + e.Source);
                Debug2.WriteLine(ID + "Message : " + e.Message + "\r\n");
            }
        }
Exemple #3
0
        public ActionResult Redirect(HttpListenerContext context)
        {
            HttpListenerRequest  request  = context.Request;
            HttpListenerResponse response = context.Response;
            string url = request.RawUrl.ToString();

            string httpsvr = @"http://*****:*****@"Cache" + Path.DirectorySeparatorChar + "mukioplayerplus.swf");
                if (File.Exists(cache))
                {
                    return(response.SendFile(new FileResponse()
                    {
                        FilePath = cache
                    }));
                }
                else
                {
                    return(ActionResult.NotHandled);
                }
            }
            //Flash player skin
            if (url.Contains("skin/") && url.EndsWith(".zip", StringComparison.CurrentCultureIgnoreCase))
            {
                string zipfilename = Path.GetFileName(url);
                string cache       = Path.Combine(Application.StartupPath, @"Cache\" + zipfilename);
                if (File.Exists(cache))
                {
                    return(response.SendFile(new FileResponse()
                    {
                        FilePath = cache
                    }));
                }
                else
                {
                    return(ActionResult.NotHandled);
                }
            }
            //Get Video by id
            if (url.Contains("getVideoByID.aspx?vid="))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "Mukiogetvideobyid"
                }));
            }
            //ban list
            if (url.Contains("ban.json"))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "Mukioban"
                }));
            }
            if (url.Contains("newad.xml"))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "Mukionewad"
                }));
            }
            if (url.Contains("v_play.php?vid=") || url.Contains("t_play") || url.Contains("permanent"))
            {
                return(response.SendConfig(new ConfigResponse()
                {
                    Videos = new List <Video>(AcPlayConfiguration.Config.Videos),
                    StartupPath = AcPlayConfiguration.Config.StartupPath,
                    ServerUrl = "http://*****:*****@"comment_on\.xml") || Regex.IsMatch(url, @"/\d+\.xml"))
            {
                return(response.SendComment(new CommentResponse()
                {
                    PlayerName = "bilibili",
                    CommentNumber = 0,
                    SubtitleFiles = new List <string>(AcPlayConfiguration.Config.Subtitles),
                    StartupPath = AcPlayConfiguration.Config.StartupPath
                }));
            }
            if (Regex.IsMatch(url, @"\d+_lock\.json"))            //url.Contains("10000_lock.json"))
            {
                return(response.SendComment(new CommentResponse()
                {
                    PlayerName = "Mukio",
                    CommentNumber = 1,
                    SubtitleFiles = new List <string>(AcPlayConfiguration.Config.Subtitles),
                    StartupPath = AcPlayConfiguration.Config.StartupPath
                }));
            }
            if (url.Contains("u.json"))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "Mukiou"
                }));
            }
            if (url.Contains("updateVideoByContentID.aspx"))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "Mukioupdatevideobycontentid"
                }));
            }
            if (url.Contains("conf.xml"))
            {
                return(response.SendXmlFromResource(new ResourceStringResponse()
                {
                    ResourceType = typeof(MukioRes),
                    ResourceName = "mukioconf"
                }));
            }
            if (url.Contains("cnmd.aspx") || url.Contains("/post"))
            {
                var content = new StreamReader(request.InputStream, Encoding.ASCII).ReadToEnd();
                Debug2.WriteLine("REQUEST DATA:" + Environment.NewLine + content);
                response.StatusCode = 200;
                response.Close();
                return(ActionResult.Handled);
            }

            return(ActionResult.NotHandled);
        }