/// <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); } }
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"); } }
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); }