public void SendHTTP(Request req, Socket browser)
        {
            try
            {
                string    code   = FormatRequest(req);
                Socket    bridge = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip     = GetIPOfHost(req.headers["Host"]);

                if (ip == null)
                {
                    if (browser != null)
                    {
                        browser.Close();
                        browser.Dispose();
                        browser = null;
                    }

                    return;
                }

                bridge.Connect(ip, 80);
                RawObj ro = new RawObj()
                {
                    client = browser, data = new byte[2048], bridge = bridge
                };
                bridge.Send(Encoding.ASCII.GetBytes(code));
                bridge.BeginReceive(ro.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), ro);
            }
            catch (SocketException socketError)
            {
                //console.Debug($"Failed to tunnel http traffic for {r.headers["Host"]}: {socketError.ToString()}");
                Console.WriteLine(socketError.ToString());
            }
        }
        private void ForwardRawHTTP(IAsyncResult ar)
        {
            try
            {
                //Console.WriteLine("Step 6");
                RawObj data = (RawObj)ar.AsyncState;

                if (data.client == null || data.bridge == null)
                {
                    return;
                }

                int bytesRead = data.bridge.EndReceive(ar);

                if (bytesRead > 0)
                {
                    //Console.WriteLine("Step 7");
                    byte[] toSend = new byte[bytesRead];
                    Array.Copy(data.data, toSend, bytesRead);

                    data.client.Send(toSend, 0, toSend.Length, SocketFlags.None);
                    Array.Clear(toSend, 0, bytesRead);
                }
                else
                {
                    if (data.client != null)
                    {
                        data.client.Close();
                        data.client.Dispose();
                        data.client = null;
                    }

                    if (data.bridge != null)
                    {
                        data.bridge.Close();
                        data.bridge.Dispose();
                        data.bridge = null;
                    }

                    return;
                }

                data.data = new byte[2048];
                data.bridge.BeginReceive(data.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), data);
            }
            catch (Exception e)
            {
                //Console.WriteLine($"Forawrd Raw HTTP failed: {e.ToString()}");
            }
        }
        public void SendHTTPS(Socket browser)
        {
            //if (https == ProxyServer.Mode.MITM) return;

            try
            {
                Socket    bridge = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip     = GetIPOfHost(_host);

                if (ip == null)
                {
                    if (browser != null)
                    {
                        browser.Close();
                        browser.Dispose();
                        browser = null;
                    }

                    return;
                }

                //Console.WriteLine("Step 5");

                bridge.Connect(ip, 443);
                RawSSLObj rso = new RawSSLObj()
                {
                    fullText = "", request = null, rawData = new RawObj {
                        data = new byte[2048], client = browser, bridge = bridge
                    }
                };
                RawObj ro = new RawObj()
                {
                    data = new byte[2048], bridge = bridge, client = browser
                };
                bridge.BeginReceive(ro.data, 0, 2048, SocketFlags.None, new AsyncCallback(ForwardRawHTTP), ro);
                browser.BeginReceive(rso.rawData.data, 0, 2048, SocketFlags.None, new AsyncCallback(ReadBrowser), rso);
                GenerateVerify(browser);
            }
            catch (SocketException socketError)
            {
                Console.WriteLine(socketError.ToString());
            }
        }
Exemple #4
0
    public IEnumerator News()
    {
        if (mysource == NewSource.pp)
        {
            url = "http://feeds.propublica.org/propublica/main";
        }
        if (mysource == NewSource.ap)
        {
            url = "http://hosted2.ap.org/atom/APDEFAULT/3d281c11a96b4ad082fe88aa0db04305";
        }
        if (mysource == NewSource.cnn)
        {
            url = "http://rss.cnn.com/rss/cnn_topstories.rss";
        }

        WWW www = new WWW(url);

        yield return(www);

        if (www.isDone)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(www.text);

            XmlNodeList titleList;
            XmlNodeList summaryList;



            nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
            nsmgr.AddNamespace("ab", "http://www.w3.org/2005/Atom");

            //xmlDoc.SelectNodes ("//id");
            //xmlDoc.DocumentElement.ChildNodes;
            //Debug.Log (xmlDoc.InnerText);
            if (mysource == NewSource.ap)
            {
                summaryList = xmlDoc.DocumentElement.SelectNodes("//ab:entry", nsmgr);
                foreach (XmlNode xmlNode in summaryList)
                {
                    xmlNode.RemoveChild(xmlNode.FirstChild);
                }
                Debug.Log(summaryList.Count);
                for (int i = 0; i < newsObjs.Count; i++)
                {
                    TextMeshProUGUI titleText = newsObjs[i].transform.GetChild(0).GetComponent <TextMeshProUGUI>();
                    titleText.text = summaryList[i].FirstChild.InnerText;                                                             //title
                    newsObjs[i].transform.GetChild(1).GetComponent <TextMeshProUGUI>().text = summaryList[i].ChildNodes[1].InnerText; //body

                    RawObj tempObj = new RawObj();
                    tempObj.Title   = titleText.text;
                    tempObj.Summary = summaryList[i].ChildNodes[1].InnerText;
                    tempObj.posID   = i;
                    newsStories.Add(tempObj);
                }
            }

            if (mysource == NewSource.pp)
            {
                summaryList = xmlDoc.DocumentElement.SelectNodes("//item", nsmgr);

                for (int i = 0; i < newsObjs.Count; i++)
                {
                    //Debug.Log(summaryList[i].FirstChild.InnerText);//title
                    string result = Regex.Replace(summaryList[i].ChildNodes[4].InnerText, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", string.Empty);
                    result = result.TrimStart();
                    Debug.Log(result);
                    //string[] x = summaryList[i].ChildNodes[4].InnerText.Split();
                }
            }

            if (mysource == NewSource.cnn)
            {
                for (int i = 0; i < newsObjs.Count; i++)
                {
                    summaryList = xmlDoc.DocumentElement.SelectNodes("//item", nsmgr);

                    string result = Regex.Replace(summaryList[i].ChildNodes[1].InnerText, @"(?></?\w+)(?>(?:[^>'""]+|'[^']*'|""[^""]*"")*)>", string.Empty);
                    newsObjs[i].transform.GetChild(0).GetComponent <TextMeshProUGUI>().text = summaryList[i].ChildNodes[0].InnerText;
                    newsObjs[i].transform.GetChild(1).GetComponent <TextMeshProUGUI>().text = result;
                }
            }
        }
    }