public static void ProcessRequest(ClientWebRequest equest) { lock(syncobj) { if(db == null) { db = new PubKeyDatabase("default",File.Open("OpenNetDB_client",FileMode.OpenOrCreate)); } if(db.Length == 0) { db.AddPublicKey(db.GenPublicPrivateKey(2048)); db.GetPublicKeyOnly(db[0]); } Uri url = new Uri("http:/"+equest.UnsanitizedRelativeURI.Replace("idw.local.ids","127.0.0.1")); if(!drivers.ContainsKey(url.Host)) { Console.WriteLine("Connecting to "+url.Host); HttpWebRequest request = HttpWebRequest.Create("http://"+url.Host+"/OpenNetProvider") as HttpWebRequest; request.AllowWriteStreamBuffering = false; Stream receiver = new TrashyStream(request.GetResponse().GetResponseStream()); BinaryReader mreader = new BinaryReader(receiver); byte[] guid = mreader.ReadBytes(16); Console.WriteLine(BitConverter.ToString(guid)); request = HttpWebRequest.Create("http://"+url.Host+"/OpenNetProvider") as HttpWebRequest; request.Method = "POST"; request.ContentLength = 9999999999; request.AllowWriteStreamBuffering = false; Stream sender = new TrashyStream(request.GetRequestStream()); BinaryWriter mwriter = new BinaryWriter(sender); mwriter.Write(guid); mwriter.Flush(); byte[] theirpubkey = mreader.ReadBytes(mreader.ReadInt32()); Stream dbStr = File.Open("keyDB.db", FileMode.OpenOrCreate); byte[] ourpublickey = db.GetPublicKeyOnly(db[0]); byte[] ourprivatekey = db[0]; mwriter.Write(ourpublickey.Length); mwriter.Write(ourpublickey); mwriter.Flush(); db.AddPublicKey(theirpubkey); Stream securedStream = new TrashyStream(db.CreateAuthenticatedStream(ourprivatekey, new DualStream(sender, receiver), 32)); Console.WriteLine("Secure stream negotiated"); driver = new OpenNetProtocolDriver(securedStream); drivers.Add(url.Host,driver); Console.WriteLine("Driver initialized"); } mvent.Reset(); currentRequest = equest; currentURL = url; driver = drivers[url.Host]; drivers[url.Host].onConnectionEstablished += HandleonConnectionEstablished; drivers[url.Host].OpenStream(); mvent.WaitOne(); } }
static void Main(string[] args) { Console.WriteLine("Opening HTTP request"); HttpWebRequest request = HttpWebRequest.Create("http://127.0.0.1/OpenNetProvider") as HttpWebRequest; request.AllowWriteStreamBuffering = false; Stream receiver = new TrashyStream(request.GetResponse().GetResponseStream()); BinaryReader mreader = new BinaryReader(receiver); byte[] guid = mreader.ReadBytes(16); Console.WriteLine(BitConverter.ToString(guid)); request = HttpWebRequest.Create("http://127.0.0.1/OpenNetProvider") as HttpWebRequest; request.Method = "POST"; request.ContentLength = 9999999999; request.AllowWriteStreamBuffering = false; Stream sender = new TrashyStream(request.GetRequestStream()); BinaryWriter mwriter = new BinaryWriter(sender); mwriter.Write(guid); mwriter.Flush(); byte[] theirpubkey = mreader.ReadBytes(mreader.ReadInt32()); Stream dbStr = File.Open("keyDB.db", FileMode.OpenOrCreate); Console.WriteLine("Enter system password"); PubKeyDatabase db = new PubKeyDatabase(ReadPassword(), dbStr); if (db.Length == 0) { db.AddPublicKey(db.GenPublicPrivateKey(2048)); } byte[] ourpublickey = db.GetPublicKeyOnly(db[0]); byte[] ourprivatekey = db[0]; mwriter.Write(ourpublickey.Length); mwriter.Write(ourpublickey); mwriter.Flush(); db.AddPublicKey(theirpubkey); Stream securedStream = new TrashyStream(db.CreateAuthenticatedStream(ourprivatekey, new DualStream(sender, receiver), 32)); Console.WriteLine("Secure stream negotiated"); driver = new OpenNetProvider.OpenNetProtocolDriver(securedStream); Console.WriteLine("Driver initialized"); driver.OpenStream(); driver.onConnectionEstablished += new OpenNetProvider.OpenNetProtocolDriver.ConnectionEstablishedEventArgs(driver_onConnectionEstablished); }
public void onRequest(ClientWebRequest request) { if(request.Method == "GET") { //Initiate session ClientHttpResponse response = new ClientHttpResponse(); response.ContentType = "text/html"; response.len = 1024*1024*300; response.StatusCode = "200 OK"; response.WriteHeader(request.stream); ClientSession session = new ClientSession(); session.sessionID = Guid.NewGuid(); TrashyStream garbage = new TrashyStream(request.stream); session.writer = garbage; BinaryWriter mwriter = new BinaryWriter(garbage); mwriter.Write(session.sessionID.ToByteArray()); mwriter.Flush(); lock(ClientSession.sessions) { ClientSession.sessions.Add(session.sessionID,session); } session.WaitHandle.WaitOne(); }else { try { TrashyStream reader = new TrashyStream(request.stream); BinaryReader mreader = new BinaryReader(reader); ClientSession currentSession = ClientSession.sessions[new Guid(mreader.ReadBytes(16))]; currentSession.reader = reader; BinaryWriter mwriter = new BinaryWriter(currentSession.writer); byte[] ourprivatekey = db[0]; byte[] ourpubkey = db.GetPublicKeyOnly(ourprivatekey); mwriter.Write(ourpubkey.Length); mwriter.Write(ourpubkey); mwriter.Flush(); byte[] theirpubkey = mreader.ReadBytes(mreader.ReadInt32()); if(!db.IsKeyTrusted(theirpubkey)) { db.AddPublicKey(theirpubkey); db.Commit(); } currentSession.securedStream = new TrashyStream(db.CreateAuthenticatedStream(ourprivatekey,new DualStream(currentSession.writer,currentSession.reader),32)); Console.WriteLine("Secure stream negotiated"); currentSession.pubKey = BitConverter.ToString(theirpubkey); OpenNetProtocolDriver driver = new OpenNetProtocolDriver(currentSession); }catch(Exception er) { Console.WriteLine(er); } } }